rm -rf /some/path/*
menghapus semua file yang tidak disembunyikan di dir itu (dan subdir).
rm -rf /some/path/.*
menghapus semua file tersembunyi di dir itu (tetapi tidak subdirektori) dan juga memberikan kesalahan / peringatan berikut:
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
Apa cara yang tepat untuk menghapus semua file dan folder yang tersembunyi dan tidak tersembunyi secara rekursif di direktori target tanpa menerima peringatan / kesalahan tentang .
dan ..
?
rm ..?* .[!.]*
harus melakukannya).*
cocok dengan semua file non-dot,.[!.]*
cocok dengan semua file dot kecuali.
dan file yang namanya dimulai dengan..
, dan..?*
cocok dengan semua file dot-dot kecuali..
. Bersama-sama mereka mencocokkan semua file selain.
dan..
. Jika salah satu dari tiga pola ini tidak cocok dengan apa pun, itu akan berkembang dengan sendirinya;rm -f
tidak peduli dengan argumen yang tidak ada, jadi ini tidak masalah.Anda juga bisa menggunakan
find
. Ini lebih kompleks tetapi memiliki keuntungan bekerja bahkan jika ada begitu banyak file yang wildcard di atas akan berkembang melampaui batas panjang baris perintah sistem Anda.Anda mungkin merasa lebih jelas untuk menghapus dan membuat ulang direktori. Ini memiliki keuntungan (atau kelemahan, seperti halnya) untuk menghasilkan direktori kosong bahkan jika program lain secara bersamaan membuat file di direktori asli.
sumber
find
alternatif mengembalikan "sukses" bahkan jika beberapa file tidak berhasil dihapus; tidak baik untuk skrip.find
perintah kedua Anda , halaman manual untuk status "Karena -hapus berarti -depth, Anda tidak dapat menggunakan -prune dan -hapus bersama-sama." - belum kamu gunakan-prune -delete
?-prune
tidak melakukan apa pun di sini. Dan saat membaca kembali saya melihat bahwa saya tidak menjawab pertanyaan dengan benar: Saya berusaha untuk tidak berulang, tetapi pertanyaan itu secara eksplisit meminta penghapusan rekursif. Saya sudah mengoreksi jawaban saya..[^.]*
alih-alih.[!.]*
ketika subtitusi riwayat diaktifkan (yang secara default adalah kasus secara interaktif tetapi tidak dalam skrip), karena zsh mem!
- parsing sebagai referensi riwayat. Tetapi di zsh Anda tidak akan membutuhkan itu sejak awal, Anda bisa menggunakan*(D)
untuk memasukkan file dot (tanpa.
atau..
) dalam kecocokan wildcard.Baru menyadari ini adalah cara paling nyaman di sebagian besar distro Linux:
dimana
-A
= daftar semuanya kecuali.
dan..
-1
= menempatkan setiap item dalam satu barissumber
ls -A1 /your/path/ | xargs rm -rf
harus berlakuUbah
dotglob
opsi shell Anda dan gunakan*
, atau gunakan sesuatu sepertifind
.sumber
rm -rf /some/dir
dan kemudian membuat direktori kosong baru di tempatnya.Ini seharusnya berfungsi seperti jawaban @Gilles tetapi lebih ringkas:
atau
juga harus menambahkan
if
untuk penggunaan dalam skrip agar aman:sumber
alias cleandir='rm -rf {,.[!.],..?}*'
demikian.Temukan adalah teman Anda.
Jika Anda ingin menggunakan pencarian secara rekursif lainnya di direktori Anda saat ini ($ PWD), maka tambahkan path tepat setelah
find
perintah; misalnyafind /path ! -name '.' ! -name '..' -delete
,. Jika Anda hanya ingin menurunkann
jumlah direktori, maka gunakan-maxdepth n
opsi tepat setelah/path
parameter.Perintah di atas diuji pada sistem Ubuntu 13.04. Kemungkinan akan bekerja pada sistem linux modern lainnya.
sumber
find . ! -name '.' ! -name '..' -type d -delete
Dengan asumsi direktori yang bersangkutan
./dir
, makaakan menghapus semua file
./dir
, termasuk file dan direktori tersembunyi, secara rekursif, dan termasuk./dir
direktori itu sendiri.Jika Anda tidak ingin menghapus direktori itu sendiri, maka Anda dapat membuatnya kembali setelahnya, atau menggunakannya
atau jika Anda
find
tidak mendukung-delete
,Menggunakan
-mindepth 1
memungkinkan Anda untuk menyimpan direktori tingkat atas./dir
.sumber
Saya sarankan Anda bereksperimen dengan
Turn- ON dots (file tersembunyi)
set
dotglob
shopt -s dotglob
Turn OFF titik
tidak disetel
dotglob
shopt -u dotglob
Metode ini bekerja persis seperti yang saya harapkan untuk perintah copy yang hilang direktori tersembunyi.
Jadi saya melakukan hapus (hapus), dan oops ...
... itu juga berhasil!
Terpikir oleh saya bahwa Anda pembaca yang budiman tidak dapat melihat
message_splitter
direktori. Cara apa pun itu memiliki.svn
folder yang perlu dihapus, dan disalin ke.Dari
man
halaman ...referensi:
sumber
Coba kode ini:
sumber