Linux フォルダ内のファイルを削除する方法

Linux フォルダ内のファイルを削除する方法

目標は、指定された名前のディレクトリを見つけて、その中のすべてのファイルを削除することです。実際のディレクトリは保持されます。

find /home/www/sites/ -iname '_cache' -exec du -hs {} \;

これにより、ファイルのサイズのリストが表示されます

204K    /home/www/sites/test.site.com/html/development/Temporary/_cache
904K    /home/www/sites/test.site2.com/html/development/Temporary/_cache

Linux の find コマンドで実現することは可能ですか?

答え1

何か試してみたところ、うまくいっているようです。これは Alex がここに投稿した解決策と似ています。

find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -exec rm {} \;

_cache ディレクトリ内にあるファイルのみを削除します。_cache ディレクトリのサブディレクトリにあるファイルは削除されません。

もちろん、使用する前に試してみて、rm の代わりに ls または無害なものを入力してください。

答え2

このロジックを徹底的にテストしたわけではありませんが、ループ内で次のような操作を実行できます。

for findname in $(find /path/to/search -name '_pattern')
do
  find $findname -type f
done

したがって、検索パターンに一致するファイルのリストを取得し、新しい検索で各ファイルをループして、削除するファイルを探します。

記述されている方法ではファイルのリストが得られるので、それをファイルにリダイレクトして、rm でループすることができます。また、for ループ内の find に exec を追加することもできます。ロジックをテストし、一致が適切であることを確認するために、最初に記述どおりに実行することをお勧めします。

答え3

消去するための正しいコマンド

find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -delete 

答え4

find には -delete オプションがあります。これにより、一致したものがすべて削除されます。

マニュアルページより

-消去

          Delete files; true if removal succeeded.  If the removal failed,
          an  error message is issued.  If -delete fails, find's exit stat-
          us will be nonzero (when it eventually 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 starting 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.

関連情報