Maaf, saya lupa menyebutkan bahwa direktori ini mungkin memiliki file. Saya tidak dapat menghapus beberapa dari mereka karena kesalahan "temukan: tidak bisa menghapus` ./start ': Directory not empty "
pengumpulan sampah
@garbagecollection Saya menambahkan pembaruan.
jaypal singh
3
Anda bisa menggunakan +alih-alih \;melewati lebih dari satu direktori pada suatu waktu.
jfs
Terima kasih @ JSFSebastian Poin bagus. Saya akan menambahkannya ke jawabannya.
Ketika jawaban lain menunjukkan, Anda dapat mencoba menemukan semua direktori dengan nama testdan menghapusnya
find -name "test" -type d -delete
Saya mengalami beberapa masalah dengan kompatibilitas silang pada Mac, jadi saya menggunakan perintah yang setara ini:
find -path "*/test" -type d -delete
-jalan : mencari pola dalam nama file yang memenuhi syarat.
Namun dalam kedua kasus, jika ada direktori yang bernama test memiliki file di dalamnya,find akan mengeluh bahwa Directory is not empty, dan akan gagal menghapus direktori.
Jika Anda bermaksud menghapus semua file termasuktest direktori, maka kita dapat menggunakan trik yang sama untuk menghapus semua file di dalam direktori yang bernama testterlebih dahulu.
find -path "*/test/*" -delete
Pola:, "*/test/*"akan memastikan kami hanya menghapus file di dalam direktori yang bernama /test/. Setelah direktori kosong, kita dapat melanjutkan dan menghapus direktori menggunakan perintah pertama:
find -path "*/test" -type d -delete
Contoh:
$ tree
.
├── mytest
│ └── test
│ └── blah.txt
├── test
│ ├── bar.jpg
│ └── dir
│ └── bar.bak
└── testdir
└── baz.c
5 directories, 4 files
$ find -path "*/test" -type d -delete
$ tree
.
├── mytest
│ └── test
├── test
└── testdir
└── baz.c
4 directories, 1 file
$ find -name "test" -type d -delete
$ tree
.
├── mytest
└── testdir
└── baz.c
2 directories, 1 file
+
ditemukan. Saya tidak tahu, pasti berharap saya sudah tahu itu sejak lama.xargs
perintah bekerja dengan baik.-nama: mencari nama yang diteruskan. Anda dapat menggunakan
-regex
untuk memberikan nama berdasarkan ekspresi reguler-mengetik: mencari jenis file.
d
hanya mencari direktori-menghapus: tindakan yang menghapus daftar yang ditemukan.
Kalau tidak:
Sebagai JF Sebastian dalam komentar:
Anda dapat menggunakan
+
alih-alih\;
melewati lebih dari satu direktori pada suatu waktu.sumber
+
alih-alih\;
melewati lebih dari satu direktori pada suatu waktu.Belum cara lain untuk melakukan ini adalah
Tautan bermanfaat di find: http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml
sumber
Anda juga dapat menggunakan opsi -exec
sumber
Dengan asumsi bash 4+
Garis miring berarti bahwa itu hanya akan cocok dengan direktori. Tes sebelumnya dengan:
sumber
Asumsikan Anda menggunakan gnu find , Anda dapat menggunakan opsi -delete:
find . -name test -delete
yang lebih mudah diingat.
sumber
Ketika jawaban lain menunjukkan, Anda dapat mencoba menemukan semua direktori dengan nama
test
dan menghapusnyaSaya mengalami beberapa masalah dengan kompatibilitas silang pada Mac, jadi saya menggunakan perintah yang setara ini:
Namun dalam kedua kasus, jika ada direktori yang bernama
test
memiliki file di dalamnya,find
akan mengeluh bahwaDirectory is not empty
, dan akan gagal menghapus direktori.Jika Anda bermaksud menghapus semua file termasuk
test
direktori, maka kita dapat menggunakan trik yang sama untuk menghapus semua file di dalam direktori yang bernamatest
terlebih dahulu.Pola:,
"*/test/*"
akan memastikan kami hanya menghapus file di dalam direktori yang bernama/test/
. Setelah direktori kosong, kita dapat melanjutkan dan menghapus direktori menggunakan perintah pertama:Contoh:
sumber