Saya perlu menemukan semua file dimulai dengan nama NAME
di pohon direktori dan menghapus semua file ini menggunakan satu perintah shell.
Saya perlu menemukan semua file dimulai dengan nama NAME
di pohon direktori dan menghapus semua file ini menggunakan satu perintah shell.
Jawaban:
untuk menghapus semua file yang namanya memiliki nama --- Anda dapat menggunakan
find -name . 'name*' -exec rm {} \;
grep
memiliki -exec
saklar?
Hapus semua file dalam direktori saat ini dan sub-direktori di mana nama file dimulai dengan "foo":
$ find . -type f -name foo\* -exec rm {} \;
NB: gunakan dengan hati-hati - back up dulu - juga melakukan dry run dulu, mis
$ find . -type f -name foo\*
hanya akan memberi tahu Anda nama file yang akan dihapus.
find . -type f -name foo\* -delete
lakukan triknya
Saya telah mencoba cara ini berfungsi untuk saya coba perintah di bawah ini.
rm -rf Example*
di sini "Contoh" adalah teks yang umum untuk semua file.
Anda bisa menggunakan find
:
find . -name "name*" -exec rm {} \;
Dengan globstar
opsi (aktifkan dengan shopt -s globstar
):
rm -f **/NAME*
**/
mengembang untuk ./
, */
, */*/
, */*/*/
dll Jika Anda memiliki direktori nama dimulai dengan NAME
, perintah akan mengeluh bahwa rm
tidak dapat menghapus direktori, tapi itu semua.
Perhatikan bahwa ini mungkin mengalami batasan panjang baris perintah jika glob cocok dengan banyak file.
Atau, dengan pemanggilan sesedikit rm
mungkin, tetapi tidak tunduk pada batasan panjang baris perintah:
find . -type f -name 'NAME*' -exec rm -f {} +
(Perhatikan +
bukan \;
untuk menutup -exec
pernyataan.)
find . -name 'foo'* -type f -delete
sepertinya jawaban paling sederhana.
Anda dapat menjalankan ini tanpa -delete
tanda sebelumnya untuk melihat file mana yang akan dihapus.
Cari "Inode" nomor file / folder dan kemudian hapus menggunakan nomor inode. Di bawah ini adalah contohnya:
ls -il
3407873 drwxr-xr-x. 2 root root 4096 Mar 30 07:49 –p
find . -inum 3407873 -exec rm -rf {} \;