Untuk jenis struktur dir:
/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...
Saya tahu bahwa saya dapat menggunakan rm -rf /config/filesgroups
untuk menghapus folder induk dan semua sub-folder ...
tapi saya ingin menghapus hanya /filegroupA
, /filegroupB
, dll, dan tidak menghapus/config/filegroups
rm -rf /config/filegroups/filegroups{A,B}
?bash
tidak termasuk '.' folder dalam perluasan pathname. Yang mungkin atau mungkin tidak diinginkan. Diri saya lakukanshopt -s dotglob
di.bashrc
untuk memperbaiki itu. Hanya catatan tambahan yang mungkin bermanfaat bagi seseorang;).rm -rf /*
akan melakukan;) --- serius jangan lakukan ituJawaban:
Jika Anda ingin menghapus hanya direktori (dan symlink ke direktori), membiarkan semua file
/config/filegroups
tidak tersentuh, Anda dapat menggunakan garis miring:Jika Anda ingin menghapus direktori dengan nama yang dimulai dengan
.
juga, dengan asumsi Anda memiliki bash yang cukup baru, Anda harus menggunakan opsi shell dotglob:sumber
Ini akan menghapus semua file dan direktori di bawah
/config/filegroups
termasuk file dan direktori "tersembunyi" (nama dimulai dengan.
).Jika nama file atau direktori mengandung spasi Anda harus melakukannya seperti ini:
Bonus: Anda dapat memeriksa dulu apa yang akan dihapus seperti ini:
Jika Anda ingin menyimpan file atau direktori tertentu, Anda dapat melakukannya seperti ini:
sumber
find
's-delete
pilihan?-delete
menolak untuk menghapus direktori yang tidak kosong.-maxdepth
menimpa-depth
, yang diperlukan oleh-delete
untuk menghapus direktori yang tidak kosong. Tanpa-maxdepth
Anda tidak dapat dengan mudah melihat direktori mana yang akan dihapus karena ia juga mencantumkan file di dalam direktori. Tidak menggunakan-maxdepth
juga berarti Anda tidak dapat dengan mudah menggunakan filter seperti-name
. Selanjutnya-delete
hapus direktori dengan menghapus semua objek di dalamnya terlebih dahulu, yang bisa memakan waktu lama jika itu adalah pohon besar dan dalam.Saya lebih suka menggunakan
find
dengan-exec
, yang akan membuat panggilan Anda menjadi seperti ini:sumber
Jika Anda sudah berada di folder, Anda cukup mengetik
rm -rf ./**
Begitu:
Ini adalah pola glob untuk menghapus semua subfolder dari jalur lokal ..
./
merujuk ke folder lokal ... dan**
untuk semua folder di bawah ..sumber
rm -rf ./*
, kecuali bahwa Anda cenderung mendapatkan pesan diagnostik tentang "Tidak ada file atau direktori" jika Anda tidak menggunakan-f
dalam perintah Anda (karena direktori paling atas akan dihapus secara rekursif sebelum isinya diproses olehrm
).