web-dev-qa-db-ja.com

ディレクトリとその子からすべてのファイルタイプを削除する

という印象を受けました

rm -r *.xml

ただし、親と子からすべてのファイルを削除します。

*.xml: No such file or directory
30
Will

Rmのmanページには、次のように書かれています。

 -r, -R, --recursive
          remove directories and their contents recursively

つまり、フラグ-rはディレクトリを想定しています。だが *.xmlはディレクトリではありません。

現在のディレクトリからすべての.xmlファイルを再帰的に削除する場合は、次のコマンドを実行します。

find . -name "*.xml" -type f|xargs rm -f
46
Vijay

すべての*.xmlファイルを再帰的に削除することを想定しています(現在のディレクトリとすべてのサブディレクトリ内)。これを行うには、 find を使用します。

find . -name "*.xml" -exec rm {} \;

余談ですが、再帰的な削除は私を怖がらせます。私の正気な日に、私はそのステップの前に次のような傾向があります:

find . -name "*.xml" 

-execビットなしで)飛躍する前に何が削除されるかを確認します。同じことをお勧めします。あなたのファイルはあなたに感謝します。

28
Shawn Chin

より美しい方法ですが、これはUNIXシステムではサポートされていません。

rm -rf */*.xml

これにより、現在のディレクトリのすべてのサブディレクトリからxmlファイルが削除されます。

3
holms

読んで 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
3
madc

ZSHは、救済への再帰的グロビングです!

Zshを呼び出す:zsh

目的のディレクトリにいることを確認してください:cd wherever

最初にリスト:ls **/*.xml

削除する: rm **/*.xml

私はbashをbashする強い誘惑に抵抗し、トピック here に関する関連するzshドキュメントを指すだけにします。

2
mattmc3