※こちらは旧サイトです(新サイトはこちら

半角スペースを含むファイル名をxargsで処理するメモ

2017-05-15 09:23:36

この中から「コピー」が含まれるファイルだけ削除したかった

$ 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

// 「コピー」が含まれるファイル名のみ抜き出す
$ ls -F | grep コピー
新しいテキスト ドキュメント - コピー (2).txt
新しいテキスト ドキュメント - コピー (3).txt
新しいテキスト ドキュメント - コピー (4).txt
新しいテキスト ドキュメント - コピー (5).txt
新しいテキスト ドキュメント - コピー.txt

xargs

そのままやると、半角スペースが区切り文字扱いになってうまくいかない

$ 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オプションをつけて、ダブルクォートで囲ってやる

$ 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