`find -delete`はすべてを削除します

`find -delete`はすべてを削除します

私はそれに慣れておらず、find誤って多くのファイルを削除しました。経験豊富な人が私が間違っている部分を説明できるかどうか疑問に思います。


MacBookのFinderが私のRaspbian Samba共有に公開したすべてのファイルを整理したいと思います.DS_Store._.DS_Store

  • 私のラズベリーパイにハードドライブが接続されており、ホームフォルダにマウントポイントへのシンボリックリンクがあるので-L
  • 一部のフォルダはシステムユーザー(たとえばapache)が所有しているため sudo

findターゲットファイルが正しいことを確認するために、次のコマンドを実行しました。

hydraxan@raspberry:~ $ sudo find -L . -maxdepth 255 -name \*DS_Store\*
./.DS_Store
./Downloads/USBHDD1/._.DS_Store
./Downloads/USBHDD1/.DS_Store
./Downloads/USBHDD1/backups/ALAC/._.DS_Store
./Downloads/USBHDD1/backups/ALAC/Jeff Van Dyck - Assault Android Cactus OST/._.DS_Store
./Downloads/USBHDD1/backups/ALAC/Jeff Van Dyck - Assault Android Cactus OST/.DS_Store
./Downloads/USBHDD1/backups/ALAC/.DS_Store
./Downloads/USBHDD1/backups/._.DS_Store
./Downloads/USBHDD1/backups/.DS_Store
./Downloads/USBHDD1/backups/OriginalMusic/._.DS_Store
./Downloads/USBHDD1/backups/OriginalMusic/.DS_Store
./Downloads/USBHDD1/backups/OriginalMusic/FLAC/.DS_Store
./Downloads/USBHDD1/backups/Storage/._.DS_Store
./Downloads/USBHDD1/backups/Storage/.DS_Store
./Downloads/OriginalMusic/._.DS_Store
./Downloads/OriginalMusic/.DS_Store
./Downloads/OriginalMusic/FLAC/.DS_Store
./Downloads/ALAC/._.DS_Store
./Downloads/ALAC/Jeff Van Dyck - Assault Android Cactus OST/._.DS_Store
./Downloads/ALAC/Jeff Van Dyck - Assault Android Cactus OST/.DS_Store
./Downloads/ALAC/.DS_Store

すべてがよさそうだ!

次に、見つかったファイルを削除-deleteするフラグを追加しました。find

hydraxan@raspberry:~ $ sudo find -L . -maxdepth 255 -delete -name \*DS_Store\*
find: cannot delete `./Documents': Not a directory
find: cannot delete `./Pictures': Not a directory
find: cannot delete `./Music': Not a directory

私はそれが何らかの理由で私のシンボリックリンクを削除しようとしていることに気づいたときにそれを打ち、Ctrl+C約半分のデータを保存しました。

文書、写真、音楽がすべて消えた。おそらく、ほとんどすべてを保存した巨大なダウンロードフォルダを介して実行されているでしょう。


なぜfindこれらのファイルをすべて削除するのですか?私は-delete奇妙な場所に入れたのでしょうか?

ベストアンサー1

findあなたの答えはマンページにあります。

削除オプションは、名前フィルタの前に処理されます。

       -delete
          Delete files; true if removal succeeded.  If the removal failed,
          an  error message is issued.  If -delete fails, find's exit sta‐
          tus 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.

削除オプションをコマンドの最後に移動できます。

または、次のようなものを使用できます。

find /path -name "*pattern*" | xargs rm -f

または

find /path -name "*pattern*" -exec rm -f {} \;

おすすめ記事