Cara menghapus semua file yang dimulai dengan string tertentu di Linux

36

Saya perlu menemukan semua file dimulai dengan nama NAMEdi pohon direktori dan menghapus semua file ini menggunakan satu perintah shell.

Achini Pumika
sumber

Jawaban:

1

untuk menghapus semua file yang namanya memiliki nama --- Anda dapat menggunakan

find -name . 'name*' -exec rm {} \;
Komunitas
sumber
1
Anda juga dapat menambahkan -f sebagai argumen 'rm' sehingga Anda tidak diminta untuk "Apakah Anda yakin ingin menghapus file X?"
UtahJarhead
Versi mana yang grepmemiliki -execsaklar?
Ben Graham
Mengapa komentar ini memiliki downvotes?
Ultrasonic54321
64

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.

Paul R
sumber
5
Saya harus menghapus lebih dari 2 juta file dan mengalami kesulitan, find . -type f -name foo\* -deletelakukan triknya
Linas
25

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.

Dinesh Bhojvani
sumber
4
Tidak yakin mengapa ini bukan jawaban dengan suara terbanyak ....
DanTheMan
@DanTheMan Itu karena ~ 4 tahun lebih baru daripada jawaban lainnya. Ini jelas merupakan jawaban yang paling sederhana.
joshuakcockrell
10

Anda bisa menggunakan find:

find . -name "name*" -exec rm {} \;
PP
sumber
Juga alih-alih menentukan '.' Anda dapat menentukan jalur absolut.
UtahJarhead
3

Dengan globstaropsi (aktifkan dengan shopt -s globstar):

rm -f **/NAME*

**/mengembang untuk ./, */, */*/, */*/*/dll Jika Anda memiliki direktori nama dimulai dengan NAME, perintah akan mengeluh bahwa rmtidak 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 rmmungkin, tetapi tidak tunduk pada batasan panjang baris perintah:

find . -type f -name 'NAME*' -exec rm -f {} +

(Perhatikan + bukan \;untuk menutup -execpernyataan.)

Benjamin W.
sumber
2

find . -name 'foo'* -type f -delete sepertinya jawaban paling sederhana.

Anda dapat menjalankan ini tanpa -deletetanda sebelumnya untuk melihat file mana yang akan dihapus.

Yehuda Schwartz
sumber
-2

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 {} \;
Diwa
sumber
Ini adalah jawaban yang bagus - untuk pertanyaan yang berbeda . Itu bukan jawaban untuk pertanyaan ini .
Scott