私はAmazon Linux、bashシェルを使用しています。特定のホームディレクトリから "target"という名前のすべてのサブディレクトリを削除するステートメントを作成しようとしています。ディレクトリが存在しなくてもエラーが発生しないような内容を作成したいと思います。以下を試しましたが、エラーが発生します。
[jboss@mydevbox ~]$ find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -print0 | xargs rm -rf
xargs: Warning: a NUL character occurred in the input. It cannot be passed through in the argument list. Did you mean to use the --null option?
上記の内容をどのようにすればもっと使いやすいでしょうか?
答え1
を使用している場合は、このフラグを使用して名前を正しく読み取る必要が-print0
あります。-0
xargs
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -print0 | xargs -0 rm -rf
または、GNUがある場合はfind
そのフラグを使用できますが、-delete
ディレクトリが空でない限り機能しません。
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -delete
-exec
またはfindと一緒に使用することもできます。
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -exec rm -rf {} +
答え2
Modern find
(POSIXでは、OpenBSDのGNUではない場合はこれをサポートします)は、フォームを介して呼び出すことfind
なく必要な操作を実行できます。xargs
-exec command {} +
find ... -exec rm -rf '{}' \+