Melalui manuver berkepala tulang di pihak saya, saya tidak sengaja membuat direktori bernama (misalnya) -A, dan akhirnya mengisinya dengan file.
Saya ingin menghapus direktori tersebut. Saya sudah mencoba:
rmdir -- -A
tetapi kemudian memberitahu saya bahwa direktori tersebut masih memiliki file di dalamnya. Dan saya tidak tahu bagaimana cara cd ke direktori untuk menghapus file tersebut.
Apa yang harus saya lakukan untuk menyingkirkan direktori yang merepotkan ini?
unix
unix-shell
Kate Bertelsen
sumber
sumber
Jawaban:
Gunakan - pada setiap perintah.
sumber
Anda dapat meletakkan ./ di depan file - dengan begitu rm atau rmdir tidak akan berperilaku seolah-olah nama file adalah flag opsi.
Anda juga dapat mengeluarkan opsi - yang memberitahu rm untuk bertindak seolah-olah semuanya setelah - adalah nama file dan tidak boleh memproses opsi lagi. Mungkin ada versi rm funky yang lebih lama yang tidak mematuhinya, meskipun kebun binatang unix antik saya telah menjadi sangat kecil hari ini jadi saya tidak bisa memberi tahu Anda yang mana atau jika ada versi yang tidak mengerti -.
Anda harus membiasakan meletakkan ./ di depan nama ketika Anda menghapusnya - Anda tidak pernah tahu apakah ada file bernama -r atau -rf di direktori Anda. Anda dapat mengatakan bahwa Anda harus selalu menggunakan - tetapi saya menemukan bahwa ./ lebih alami karena membuat eksplisit bahwa "Saya ingin menghapus file di direktori ini, bukan apa pun * yang terjadi pada glob out to"
sumber
Ganti nama itu lalu tangani secara normal:
sumber
rmdir tidak akan menghapus direktori dengan apa pun di dalamnya. "rm -rf" akan. rmdir jauh lebih aman daripada "rm -rf". Jawaban Moo mungkin masih yang terbaik.
sumber
Perintah di atas bekerja untuk saya.
sumber
Metode lain adalah menghapus dengan inode (ini berfungsi untuk file / direktori dengan karakter lain yang sulit untuk dihapus hanya dengan rm).
sumber
-exec
tidak luput dari namanya, dan tidak perlu; argumen yang dikirimkan melalui salah satuexec*
syscalls adalah nama sebenarnya. Ini hanya input shell yang memerlukan karakter khusus seperti tanda bintang ruang asterisk dll. Dikutip untuk mendapatkan shell untuk melewati nama sebenarnya (TANPA tanda kutip) yang benar. Yang mengatakan,find -exec rm -f {}
hanya berfungsi untuk file, bukan direktori seperti yang diminta untuk Q ini;find -exec rm -rf {}
memang menangani direktori dan bahkan direktori kosong, tetapi melompatfind
- lompat dan melakukanrm -rf ./-A
jauh lebih mudah.find dapat menghapus direktori dengan cara ini:
sumber
Saya mencoba menghapus direktori bernama
-p
. @Moo menjawab apa yang saya tidak bisarm ./-p
, yang tersedia secara luas di banyak halaman web setelah pencarian Google.Metode lain adalah dengan menggunakan nomor inode. Saya menggunakan metode yang dijelaskan di sini:
https://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html
Singkatnya, gunakan perintah berikut:
find
perintah menggunakan-exec rm -irf
argumen untuk file atau-exec rm -ifdr
direktori.Pastikan Anda menggunakan bagian
-f
dalam flag, jika tidak, bash akan mengeluh karena tidak dapat menemukan direktori atau file.Diuji pada:
sumber
rm -d
dan biasanya tidak-f
ketika memohon darifind
, tetapi Anda perlu-r
untuk direktori dan tidak perlu untuk file. Bahkan ketika dikoreksi metode ini masih kikuk dan inferior. Untuk direktori non-kosong lakukan sajarm -fr ./-p
- itu r untuk direktori, dan f tergantung pada pengaturan izin.