GNU/Linux >> Belajar Linux >  >> Linux

Hapus File Dan Direktori Dengan Nama Mereka. Tidak ada berkas atau direktori seperti itu?

Saya perlu menghapus semua data yang dikompilasi:

  • direktori bernama build ,
  • direktori bernama obj ,
  • *.so file.

Saya menulis perintah

find ( -name build -o -name obj -o -name *.so ) -exec rm -rf {} ;

yang melewati semua direktori secara rekursif dan menghapus semua yang saya butuhkan.

Mengapa saya memiliki output seperti itu di akhir?
Mungkin saya harus menulis perintah yang berbeda.

find: `./3/obj': No such file or directory
find: `./3/build': No such file or directory
find: `./1/obj': No such file or directory
find: `./1/build': No such file or directory
find: `./2/obj': No such file or directory
find: `./2/build': No such file or directory

Jawaban yang Diterima:

Gunakan -prune pada direktori yang akan tetap Anda hapus untuk memberi tahu find tidak perlu repot mencari file di dalamnya:

find . ( -name build -o -name obj -o -name '*.so' ) -prune -exec rm -rf {} +

Perhatikan juga bahwa *.so perlu dikutip karena jika tidak, itu dapat diperluas oleh shell ke daftar .so file di direktori saat ini.

Setara dengan -regex GNU Anda -ketik satu adalah:

find . ( -name build -o -name obj -o -name '*?.so' ) -prune -exec rm -rf {} +

Perhatikan bahwa jika Anda akan menggunakan sintaks khusus GNU, Anda sebaiknya menggunakan -delete bukannya -exec rm -rf {} + . Dengan -delete , GNU find menyalakan -depth secara otomatis. Itu tidak menjalankan perintah eksternal sehingga dengan cara itu, lebih efisien, dan juga lebih aman karena menghilangkan kondisi balapan di mana seseorang mungkin dapat membuat Anda menghapus file yang salah dengan mengubah direktori ke symlink di antara waktu find menemukan file dan rm menghapusnya (lihat info -f find -n 'Security Considerations for find' untuk detailnya).

find . -regextype posix-egrep -regex '.*/((obj|build)(/.*)?|.+.so)' -delete

Linux
  1. Cara Menemukan File Di Linux Di Semua Direktori Secara Rekursif

  2. Pindahkan File Dengan Membaca Nama File Mereka Ke Direktori Berbeda?

  3. Linux Hapus File dan Direktori

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Cara Menemukan dan Menghapus Direktori dan File Kosong di Unix

  3. Bagaimana cara menghapus semua file dalam direktori kecuali beberapa?

  1. Ganti Nama Semua File dan Nama Direktori menjadi Huruf Kecil di Linux

  2. Temukan File dan Direktori di Linux Seperti Profesional

  3. Cara Menghapus File dan Direktori di Linux dari Command Line