という印象を受けました
rm -r *.xml
ただし、親と子からすべてのファイルを削除します。
*.xml: No such file or directory
Rmのmanページには、次のように書かれています。
-r, -R, --recursive
remove directories and their contents recursively
つまり、フラグ-r
はディレクトリを想定しています。だが *.xml
はディレクトリではありません。
現在のディレクトリからすべての.xmlファイルを再帰的に削除する場合は、次のコマンドを実行します。
find . -name "*.xml" -type f|xargs rm -f
すべての*.xml
ファイルを再帰的に削除することを想定しています(現在のディレクトリとすべてのサブディレクトリ内)。これを行うには、 find
を使用します。
find . -name "*.xml" -exec rm {} \;
余談ですが、再帰的な削除は私を怖がらせます。私の正気な日に、私はそのステップの前に次のような傾向があります:
find . -name "*.xml"
(-exec
ビットなしで)飛躍する前に何が削除されるかを確認します。同じことをお勧めします。あなたのファイルはあなたに感謝します。
より美しい方法ですが、これはUNIXシステムではサポートされていません。
rm -rf */*.xml
これにより、現在のディレクトリのすべてのサブディレクトリからxmlファイルが削除されます。
読んで NIXの空のディレクトリを見つけるこの答え 、私はちょうど-deleteアクションについて学んだ:
-delete
Delete files; true if removal succeeded. If the removal failed, an error message is issued. If -delete fails, find's exit status will be nonzero (when it even‐
tually exits). Use of -delete automatically turns on the -depth option.
Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below the start‐
ing points you specified. When testing a find command line that you later intend to use with -delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot usefully use -Prune and -delete together.
出典:man find
つまり、次のようにすべてのxml-filesを再帰的に削除することもできます。
find . -name "*.xml" -type f -delete
ZSHは、救済への再帰的グロビングです!
Zshを呼び出す:zsh
目的のディレクトリにいることを確認してください:cd wherever
最初にリスト:ls **/*.xml
削除する: rm **/*.xml
私はbash
をbashする強い誘惑に抵抗し、トピック here に関する関連するzshドキュメントを指すだけにします。