通常、ファイル名にスペースが含まれるファイルを削除するには、次を実行する必要があります。
$ rm "file name"
しかし、複数のファイルを削除したい場合、例えば:
$ find . -name "*.txt" | xargs rm
これにより、スペースが含まれるファイルは削除されません。
find
とxargs
に両方ともヌルターミネータを使用するように指示できます。
find . -name "*.txt" -print0 | xargs -0 rm
または(簡単な)find
の組み込み-delete
アクションを使用する
find . -name "*.txt" -delete
または(@kosに感謝)
find . -name "*.txt" -exec rm {} +
どちらもxargs
を必要とせずにシステムのARG_MAX
制限を尊重する必要があります。
ちなみに、find以外を使用した場合は、trを使用して改行をヌルバイトに置き換えることができます。
例えば。次の1つのライナーは、名前にスペースが含まれている場合でも、ディレクトリ内の最後に変更された10個のファイルを削除します。
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
Xargsコマンドは、デフォルトでタブ、スペース、および改行を区切り文字として使用します。 -dオプションで改行文字( '\ n')のみを使用するように指示できます。
find . -name "*.txt" | xargs -d '\n' rm
SOのソース回答 。