find コマンドの出力を使用して特定のディレクトリを削除する

find コマンドの出力を使用して特定のディレクトリを削除する

この検索コマンドを実行すると、次のようになります。

find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4

私は次のような結果を得ます。

/html/car_images/inventory/16031/16031_06.jpg
/html/car_images/inventory/16117/16117_01.jpg
/html/car_images/inventory/16126/16126_01.jpg
/html/car_images/inventory/16115/16115_01.jpg
/html/car_images/inventory/16128/16128_02.jpg
/html/car_images/inventory/16128/16128_03.jpg
/html/car_images/inventory/16128/16128_04.jpg

私の目標は、各ディレクトリの「Thumbnails」フォルダを削除することです(例:このフォルダを削除する: /html/car_images/inventory/16128/thumbnails/ 削除もして/html/car_images/inventory/16115/thumbnail/

上記のfindコマンドから出力の各行を取得し、*.jpg”を“thumbnail”に変更してプレフィックス“rm -fr”を追加すると、次のような結果が得られます。

rm -fr /var/www/html/car_images/inventory/16115/thumbnails/
rm -fr /var/www/html/car_images/inventory/16128/thumbnails/

など...

これを行う方法についてのアイデアはありますか? (おそらくfindとsedを使用するか、cutの-execオプションを使用できますか?)

(私の目標全体を表現するもう1つの方法は、X日よりも「若い」.jpgファイルを含むフォルダの「サムネイル」フォルダを削除することです。)

ベストアンサー1

ファイル名に改行文字がないとします。

find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4 \
     -exec sh -c 'echo "${1%/*}"' _ {} \; | sort -u | \
          xargs -d $'\n' -I{} rm -r {}/thumbnails
  • パラメータ拡張、${1%/*}見つかった各エントリからファイル名のない部分を抽出する

  • sort -u重複するアイテムがないようにアイテムを並べ替えてから一意にします。

  • xargs -I{} rm -r {}/thumbnailsthumbnails最後に追加し、結果ディレクトリを削除します。

おすすめ記事