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


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

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"

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 {} \;

-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 ..


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.