半角スペースを含むファイル名をxargsで処理するメモ
この中から「コピー」が含まれるファイルだけ削除したかった
1 2 3 4 5 6 7 8 9 10 11 $ ls -l 合計 0 -rw-r--r-- 1 user user 0 5月 15 09:26 aaa.txt -rw-r--r-- 1 user user 0 5月 15 09:26 bbb.txt -rw-r--r-- 1 user user 0 5月 15 09:26 ccc.txt -rw-r--r-- 1 user user 0 5月 15 09:26 新しいテキスト ドキュメント - コピー (2).txt -rw-r--r-- 1 user user 0 5月 15 09:26 新しいテキスト ドキュメント - コピー (3).txt -rw-r--r-- 1 user user 0 5月 15 09:26 新しいテキスト ドキュメント - コピー (4).txt -rw-r--r-- 1 user user 0 5月 15 09:26 新しいテキスト ドキュメント - コピー (5).txt -rw-r--r-- 1 user user 0 5月 15 09:26 新しいテキスト ドキュメント - コピー.txt -rw-r--r-- 1 user user 0 5月 15 09:26 新しいテキスト ドキュメント.txt
ls 1 2 3 4 5 6 7 // 「コピー」が含まれるファイル名のみ抜き出す $ ls -F | grep コピー 新しいテキスト ドキュメント - コピー (2).txt 新しいテキスト ドキュメント - コピー (3).txt 新しいテキスト ドキュメント - コピー (4).txt 新しいテキスト ドキュメント - コピー (5).txt 新しいテキスト ドキュメント - コピー.txt
xargs そのままやると、半角スペースが区切り文字扱いになってうまくいかない
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 $ ls -F | grep コピー | xargs rm rm: `新しいテキスト' を削除できません: そのようなファイルやディレクトリはありません rm: `ドキュメント' を削除できません: そのようなファイルやディレクトリはありませんrm: `-' を削除できません: そのようなファイルやディレクトリはありません rm: `コピー' を削除できません: そのようなファイルやディレクトリはありませんrm: `(2).txt' を削除できません: そのようなファイルやディレクトリはありません rm: `新しいテキスト' を削除できません: そのようなファイルやディレクトリはありませんrm: `ドキュメント' を削除できません: そのようなファイルやディレクトリはありません rm: `-' を削除できません: そのようなファイルやディレクトリはありませんrm: `コピー' を削除できません: そのようなファイルやディレクトリはありません rm: `(3).txt' を削除できません: そのようなファイルやディレクトリはありませんrm: `新しいテキスト' を削除できません: そのようなファイルやディレクトリはありません rm: `ドキュメント' を削除できません: そのようなファイルやディレクトリはありませんrm: `-' を削除できません: そのようなファイルやディレクトリはありません rm: `コピー' を削除できません: そのようなファイルやディレクトリはありませんrm: `(4).txt' を削除できません: そのようなファイルやディレクトリはありません rm: `新しいテキスト' を削除できません: そのようなファイルやディレクトリはありませんrm: `ドキュメント' を削除できません: そのようなファイルやディレクトリはありません rm: `-' を削除できません: そのようなファイルやディレクトリはありませんrm: `コピー' を削除できません: そのようなファイルやディレクトリはありません rm: `(5).txt' を削除できません: そのようなファイルやディレクトリはありませんrm: `新しいテキスト' を削除できません: そのようなファイルやディレクトリはありません rm: `ドキュメント' を削除できません: そのようなファイルやディレクトリはありませんrm: `-' を削除できません: そのようなファイルやディレクトリはありません rm: `コピー.txt' を削除できません: そのようなファイルやディレクトリはありません
-i
オプションをつけて、ダブルクォートで囲ってやる
1 2 3 4 5 6 7 8 $ ls -F | grep コピー | xargs -i rm "{}" $ ls -l 合計 0 -rw-r--r-- 1 user user 0 5月 15 09:26 aaa.txt -rw-r--r-- 1 user user 0 5月 15 09:26 bbb.txt -rw-r--r-- 1 user user 0 5月 15 09:26 ccc.txt -rw-r--r-- 1 user user 0 5月 15 09:26 新しいテキスト ドキュメント.txt