hapus subfolder tanpa menghapus folder induk

15

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/filesgroupsuntuk menghapus folder induk dan semua sub-folder ...

tapi saya ingin menghapus hanya /filegroupA, /filegroupB, dll, dan tidak menghapus/config/filegroups

BaltoStar
sumber
13
Apakah ada masalah untuk menggunakan rm -rf / config / filesgroups / *?
dsmsk80
3
Atau bahkan mungkin rm -rf /config/filegroups/filegroups{A,B}?
Drav Sloan
@dsumsky Secara default bashtidak termasuk '.' folder dalam perluasan pathname. Yang mungkin atau mungkin tidak diinginkan. Diri saya lakukan shopt -s dotglobdi .bashrcuntuk memperbaiki itu. Hanya catatan tambahan yang mungkin bermanfaat bagi seseorang;).
Miroslav Koškár
Apakah ada yang berhasil untukmu? Jika demikian, apakah Anda keberatan menerima jawaban, untuk membantu orang lain (seperti saya) yang ingin melakukan hal yang sama?
Mawg mengatakan mengembalikan Monica
rm -rf /*akan melakukan;) --- serius jangan lakukan itu
Muhammad Umer

Jawaban:

28
rm -rf /config/filegroups/*

Jika Anda ingin menghapus hanya direktori (dan symlink ke direktori), membiarkan semua file /config/filegroupstidak tersentuh, Anda dapat menggunakan garis miring:

rm -rf /config/filegroups/*/

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:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob
Evilsoup
sumber
dan tolong jangan bahwa itu tidak akan bekerja untuk rm -rf "/ config / filegroups / *"
Ilya Yevlampiev
5

Ini akan menghapus semua file dan direktori di bawah /config/filegroupstermasuk file dan direktori "tersembunyi" (nama dimulai dengan .).

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

Jika nama file atau direktori mengandung spasi Anda harus melakukannya seperti ini:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

Bonus: Anda dapat memeriksa dulu apa yang akan dihapus seperti ini:

find /config/filegroups -mindepth 1 -maxdepth 1

Jika Anda ingin menyimpan file atau direktori tertentu, Anda dapat melakukannya seperti ini:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"
lesmana
sumber
Apakah ada alasan untuk tidak menggunakan find's -deletepilihan?
evilsoup
4
-deletemenolak untuk menghapus direktori yang tidak kosong. -maxdepthmenimpa -depth, yang diperlukan oleh -deleteuntuk menghapus direktori yang tidak kosong. Tanpa -maxdepthAnda tidak dapat dengan mudah melihat direktori mana yang akan dihapus karena ia juga mencantumkan file di dalam direktori. Tidak menggunakan -maxdepthjuga berarti Anda tidak dapat dengan mudah menggunakan filter seperti -name. Selanjutnya -deletehapus direktori dengan menghapus semua objek di dalamnya terlebih dahulu, yang bisa memakan waktu lama jika itu adalah pohon besar dan dalam.
lesmana
4

Saya lebih suka menggunakan finddengan -exec, yang akan membuat panggilan Anda menjadi seperti ini:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;
Panthro
sumber
-2

Jika Anda sudah berada di folder, Anda cukup mengetik rm -rf ./**

Begitu:

cd /config/filesgroups
rm -rf ./**

Ini adalah pola glob untuk menghapus semua subfolder dari jalur lokal ..

./merujuk ke folder lokal ... dan **untuk semua folder di bawah ..

Mantisimo
sumber
1
Folder mana, dan mengapa `**` `
RalfFriedl
1
Ini akan persis sama dengan rm -rf ./*, kecuali bahwa Anda cenderung mendapatkan pesan diagnostik tentang "Tidak ada file atau direktori" jika Anda tidak menggunakan -fdalam perintah Anda (karena direktori paling atas akan dihapus secara rekursif sebelum isinya diproses oleh rm).
Kusalananda