Pertanyaan ini semacam fase II untuk pertanyaan pertama yang saya posting di sini
Saya memiliki direktori yang berisi banyak sub-direktori, file .zip, dan file acak lainnya yang tidak terdapat dalam sub-direktori.
Saya ingin skrip baris perintah untuk menghapus semua sub-direktori dari dalam direktori induk, tetapi simpan semua file zip dan file longgar yang bukan milik sub-direktori. Semua sub-direktori memiliki konten, jadi saya yakin saya harus memaksa penghapusan mereka dengan perintah -f.
Jadi pada dasarnya, perintah yang terlihat di dalam direktori induk (atau direktori saat ini), menghapus semua folder dari dalamnya, tetapi menyimpan semua konten dan file lain yang bukan folder atau terkandung di dalam folder.
Saya mengerti bahwa menghapus item dari baris perintah memerlukan perhatian khusus, tetapi saya telah mengambil semua tindakan pencegahan yang diperlukan untuk membuat cadangan dari jarak jauh.
-r
,-R
,--recursive
Adalah sinonim yang berarti "direktori menghapus dan isinya secara rekursif".rm -R ./*/
- Ini juga menghindari masalah dengan nama tanda hubung.Selain cara wildcard, Anda juga dapat menggunakan
find
(setidaknya menemukan GNU) untuk melakukan ini:Seperti
find
baris lainnya , Anda dapat menjalankan bagian pertama (find -mindepth 1 -maxdepth 1 -type d
) untuk melihat daftar direktori yang akan dihapus.Opsi yang lebih aman adalah melakukan sesuatu seperti ini:
yang mana saja akan memindahkan semua barang
../to-rm
alih-alih menghapusnya. Anda dapat memverifikasi itu melakukan apa yang Anda inginkan, merekarm -Rf
direktori itu di waktu luang Anda.sumber
to-rm
danfind
yang dengan baik menangani direktori yang diawali dengan titik (selain pelarian rumit lainnya). :)Anda mungkin ingin membuat skrip untuk beberapa saran ini, terutama
rm -R -- */
, dan menyimpannya di folder / usr / local / bin Anda; atau buatalias
di file ~ / .bashrc Anda. Karena sangat mudah untuk salah ketik perintah dan menghancurkan sistem Anda - bahkan satu huruf dan / atau urutan huruf dapat mengakibatkan konsekuensi bencana - ini akan berfungsi sebagai solusi yang agak lebih kuat daripada harus mengetikkan opsi dan argumen yang berbeda setiap kali Anda ingin menyelesaikan tugas ini.Juga, Anda mungkin ingin memasukkan opsi
-i or --interactive=once
atau-I or --interactive=always
ke skrip / perintah Anda yang akan berfungsi sebagai alat lain untuk menghindari penghapusan yang tidak diinginkan.Lebih jauh, sesuatu seperti yang disarankan derobert adalah yang terbaik; cukup salin / rekatkan skrip ke file / terminal-editor dan sesuaikan dengan kebutuhan spesifik Anda, dan file / direktori akan dipindahkan ke satu direktori (konten yang dapat Anda periksa / verifikasi) yang bisa Anda hapus dengan mengeluarkan
rm -rf
perintah.Pilihan lain adalah menggunakan aplikasi GUI, seperti manajer file Anda, dan cukup pilih semua file / folder yang berlaku yang ingin Anda hapus. Periksa halaman manual distribusi Anda jika Anda tidak memiliki izin.
Akhirnya, jika foldernya kosong - pada dasarnya nama file sederhana - Anda dapat menggunakan
rmdir
perintah untuk menghapusnya. Ini tidak berfungsi untuk semua yang mungkin ingin Anda hapus, tetapi akan berguna pada saat Anda ingin melakukan "pembersihan rumah". ** Anda mungkin ingin mencoba-p --ignore-fail-on-non-empty
opsi, yang akan memungkinkan Anda untuk menghapus sub-direktori tertentu serta "orang tua" kosong mereka - direktori di mana mereka berada.sumber
Pertama, Anda perlu mendaftar direktori dan kemudian menghapusnya, tanpa menghambat file normal, ls -d * /, hanya mendaftar sub-direktori, dan memipangnya dengan rm menghapus direktori dan konten, menjaga file yang longgar tetap utuh.
Perintah ini harus melakukan pekerjaan,
sumber
rm -rf -- */
?printf '%s\0' */ | xargs -r0 rm -rf --
akan membantu (dalam cangkang di manaprintf
builtin dan tidakls
) untuk bekerja di sekitar daftar arg kesalahan terlalu besar , tetapils -d */ | xargs rm -rf
tidak menambahkan apa pun AFAICT kecuali masalah tambahan." .."
(spasi..
), itu akan menghapus konten direktori induk dengan beberapals
implementasi. Dan ini bukan hanya spasi, juga karakter kosong lainnya, baris baru, kutipan tunggal, kutipan ganda, backslash, dan nama file yang dimulai dengan-
.printf
untuk menghasilkan daftar tempat setiap nama diakhiri oleh karakter nol sehingga dapat diprosesxargs
dengan-0
opsi, saya sarankan Anda mengedit jawaban Anda untuk memperbaruinya dengan variasinya. Saya cukup yakin bahwa dia akan senang jika Anda menggunakan cuplikan kodenya jika Anda memahaminya dan telah belajar bagaimana melindungi terhadap perilaku yang tidak diinginkan yang disebabkan oleh nama file tertentu yang berpotensi ada.xargs
memang memiliki satu keunggulan dibandingkan jawaban yang diterima (berfungsi ketika ada banyak file / direktori di direktori saat ini) sehingga ada ruang untuk mengedit ini menjadi jawaban yang bermanfaat. Secara pribadi, saya menemukan menjawab pertanyaan Stack Exchange sebagai pengalaman belajar yang baik - terutama ketika saya mendapat umpan balik yang bermanfaat dari pengguna lain.rm -rf <directory name>
. Berhasil. Mengetikkanrm <directory name>
hanya mengarah ke sejumlah sub pertanyaan di mana setiap sub direktori harus dihapus secara manual. Tetapi,rm -rf
membantu dalam menghapus seluruh direktori bersama dengan sub direktori sekaligus.sumber