Di Linux, bagaimana cara menghapus folder dengan nama tertentu yang berada jauh di dalam hierarki folder?
Jalur berikut berada di bawah folder dan saya ingin menghapus semua folder yang bernama a
.
1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b
Perintah Linux apa yang harus saya gunakan dari folder induk?
Jawaban:
Jika direktori target kosong, gunakan temukan, filter dengan hanya direktori, filter berdasarkan nama, jalankan rmdir:
Jika Anda ingin menghapus isinya secara rekursif, ganti
-exec rmdir {} \;
dengan-delete
atau-prune -exec rm -rf {} \;
. Jawaban lain termasuk perincian tentang versi-versi ini, beri penghargaan juga.sumber
{} \;
fungsinya?{}
dapat dibaca sebagai "untuk setiap file / folder yang cocok" - yaitu itu menggantikan setiap file / folder "ditemukan".\;
adalah terminator untuk-exec
klausa.-prune
tanda pada jawaban sesuai saran @vid Grayson. Tanpa ini,find
masih akan mencoba untuk mengunjungi folder yang sekarang hilang dan akhirnya akan keluar dengan kode kesalahan, yang dapat misalnya gagal membangun Docker.Gunakan find for name "a" dan jalankan rm untuk menghapus nama sesuai dengan keinginan Anda, sebagai berikut:
Uji terlebih dahulu menggunakan ls ke daftar:
Untuk memastikan ini hanya menghapus direktori dan bukan file biasa, gunakan argumen "-type d" (seperti yang disarankan dalam komentar):
"{}" Adalah substitusi untuk setiap file "a" ditemukan - perintah exec dijalankan terhadap masing-masing oleh substitusi.
sumber
1/2/a/3/4
, yang mungkin tidak dimaksudkan, jadi +1 untuk rekomendasi untuk menguji pertama ...echo {}
untuk mengujinya terlebih dahulu, bukanls {}
node_modules/
.find . -name a -type d -exec rm -rf {} \;
dan berhasil, meskipun dicetakfind: ‘./subdir/subdir/a’: No such file or directory
untuk setiap direktori dihapus.Ini juga berfungsi - ini akan menghapus semua folder yang disebut "a" dan isinya:
sumber
find/rm
.find . -name a -exec rm -rf {} \;
, find akan macet ketika mencoba masuk ke direktori itu untuk mencari lebih banyak item, membuat Anda seperti kesalahanfind: '1/2/3/a': No such file or directory
.illegal option --t
. Aku harus juga melewati direktori untuk mencari di ( stackoverflow.com/questions/25840713/... ):rm -rf `find . -type d -name a`
.Untuk menghapus semua direktori dengan nama
foo
, jalankan:Jawaban lain tidak ada yang penting:
-prune
opsi. Tanpa-prune
, GNU find akan menghapus direktori dengan nama yang cocok dan kemudian mencoba untuk kembali ke dalamnya untuk menemukan lebih banyak direktori yang cocok. The-prune
pilihan mengatakan itu untuk tidak recurse ke direktori yang cocok dengan kondisi.sumber
Saya berakhir di sini mencari untuk menghapus
node_modules
folder saya sebelum melakukan cadangan pekerjaan saya sedang berlangsung menggunakanrsync
. Persyaratan utama adalah bahwanode_modules
folder dapat disarangkan, sehingga Anda memerlukan-prune
opsi.Pertama saya menjalankan ini untuk memverifikasi secara visual folder yang akan dihapus:
Lalu saya menjalankan ini untuk menghapus semuanya:
Berkat pistache
sumber
sh #!/bin/bash echo "Found node_modules: "; find -type d -name node_modules -prune; read -r -p "Do you really want to delete all directories? [yes/no] " input; if [ ! $input != "yes" ]; then find -type d -name node_modules -prune -exec rm -rf {} \;; fi
Sebaiknya lakukan triknya. PERINGATAN, jika Anda secara tidak sengaja memompa satu
.
atau/
kexargs rm -Rf
seluruh komputer Anda akan dihapus tanpa opsi untuk mendapatkannya kembali, memerlukan OS instal ulang.sumber
Saya punya lebih dari 100 file
jawaban di atas tidak berhasil untuk saya
tetapi perintah berikut membantu saya.
saya memberi
-type
sebagai.
sehingga menghapus kedua file dan folder yang dimulai denganlog-
dan
rm -rf
menghapus folder secara rekursif walaupun memiliki file.jika Anda ingin folder sendiri
file sendiri
sumber
Menggabungkan beberapa jawaban, inilah perintah yang berfungsi pada Linux dan MacOS
sumber
Yang lainnya:
sumber
-delete
tidak menghapus folder yang tidak kosong.Perintah ini bekerja untuk saya. Itu melakukan pekerjaannya secara rekursif
. - folder saat ini
"node_modules" - nama folder
sumber
temukan path / ke / folder / -maxdepth 1 -nama "my_ *" -type d -delete
sumber