Saya ingin "membersihkan" semua file direktori termasuk semua file dalam subdirektori tetapi saya ingin meninggalkan subdirektori di tempatnya. Pemahaman saya rm -r
adalah bahwa itu juga akan menghapus subdirektori sendiri.
Saya tidak ingin menghapus file tersembunyi (titik).
Bagaimana ini bisa dilakukan?
command-line
find
rm
Scott Wilton
sumber
sumber
find -type f ! -name "[.]*" -delete
tidak cocok?-delete
- hanya mencetak nama file yang akan dihapus.Jawaban:
Gunakan
find
untuk itu:sumber
-delete
I do not want to delete hidden (dot) files.
+
(setidaknya tidak di keluarga Bourne, csh atau rc). Ada legenda yang mengatakan bahwa beberapa versi lamacsh
diperlukan untuk melarikan diri,{}
tetapi saya belum pernah menemukannya.find . ! -name '.*' ! -type d ! -path '*/.*'
harus melakukan pekerjaan itu.find . -name '.?*' -prune -o ! -type d -exec rm {} +
menghindari turun sama sekali. Perhatikan bahwa--
ini tidak perlu di sini (meskipun tidak membahayakan) karena jalur dimulai dengan./
.coba sesuatu seperti:
sumber
.... -exec rm {} +
?-exec rm {} +
tidak paralel, hanya memanggilrm
dengan beberapa nama file. Ini menjalankan lebih sedikitrm
doa sehingga lebih ramah sumber daya. Jika itu sedikit kurang aman dalam hal itu memperbesar jendela ras di mana komponen direktori dari file yang akan dihapus dapat diubah menjadi symlink. Tetapi hanya-delete
atau-execdir rm {} \;
akan sepenuhnya mengatasinya.-exec
standar.-delete
dan-execdir
berasal dari BSD, GNU menambahkannya sekitar 10 tahun kemudian. Bagaimanapun, itu tidak ada hubungannya dengan Linux, yang hanya sebuah kernel.