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.

Jawaban:


1

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

find -name . 'name*' -exec rm {} \;

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.


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.


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 {} \;

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.)


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.


-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 {} \;

Ini adalah jawaban yang bagus - untuk pertanyaan yang berbeda . Itu bukan jawaban untuk pertanyaan ini .
Scott
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.