Hapus semua file yang nama filenya mengandung string tertentu?

22

Saya mengubah tema wordpress saya. Yang lebih tua membuat begitu banyak gambar di server. Tema baru saya tidak membutuhkannya, jadi saya ingin menghapus semua. Bagaimana saya bisa melakukan itu?

Sebagai contoh:
Gambar default:12_angry_men_lone_holdout.jpg

Saya ingin menghapus:

12_angry_men_lone_holdout-290x166.jpg
12_angry_men_lone_holdout-700x300.jpg 
12_angry_men_lone_holdout-50x50.jpg

Menggunakan Digitalocean, Ubuntu 13.10.

Ibrahim Mumcu
sumber
pada tipe terminal man rmuntuk melihat halaman manual dari perintah rm.
hmayag
Sepertinya gambar-gambar ini adalah thumbnail yang dibuat secara otomatis dari gambar yang diunggah ke perpustakaan media WorldPress Anda. Jika demikian, maka jangan hapus file-file itu di terminal di server. Buka halaman admin WordPress Anda, buka 'Pengaturan'> 'Media'. Tetapkan ukuran gambar mini yang diinginkan di sana. Kemudian instal plugin Regenerate Thumbnails dan buat kembali semua thumbnail (mungkin perlu beberapa menit, tergantung dari jumlah gambar di perpustakaan media Anda).
Bob

Jawaban:

22

Jika mereka berada di folder yang sama gunakan * wildcard untuk mencapai itu:

rm *text*

Di mana textstring yang berisi nama file.

myhau
sumber
Sebenarnya ini bukan satu direktori tetapi saya dapat melakukannya satu per satu untuk saat ini. Terima kasih!
Ibrahim Mumcu
27

Gunakan finduntuk secara rekursif menemukan dan menghapus file dengan "teks" di namanya:

find -type f -name '*text*' -delete

Anda mungkin juga ingin menjalankan find -type f -name '*text*'(tanpa -delete) sebelum itu untuk memastikan Anda tidak akan menghapus file yang tidak ingin Anda hapus.


Bahkan, Anda dapat menempatkan wildcard di mana saja di string pencarian, jadi -name '12_angry_men_lone_holdout-*.jpg'mungkin lebih cocok untuk kasus Anda.

n.st
sumber
Apakah itu tidak perlu mewakili path file
Avinash Raj
@AvinashRaj Jika parameter pertama bukan jalan, findcari direktori aktif saat ini.
n.st
Seseorang menaruh. setelah menemukan untuk mencari di dalam direktori kerja saat ini.
Avinash Raj
1
@AvinashRaj Itu akan berlebihan. Per man find: Jika tidak ada jalur yang diberikan, direktori saat ini digunakan.
n.st
@AvinashRaj Ternyata POSIX spesifikasi untuk findbenar-benar tidak membutuhkan jalan. Default ke .adalah modifikasi yang ditambahkan oleh GNU find. Jika ini adalah Unix & Linux , saya akan menambahkannya ke jawaban saya, tetapi karena Ubuntu datang dengan GNU secara default, saya lebih suka tidak membingungkan pendatang baru lebih dari yang diperlukan. ;)
n.st
1

Coba ini:

rm -rf 12_angry_men_lone_holdout-*

Ini akan keep 12_angry_men_lone_holdout.jpgdan menghapus file dengan dimensi (290x166)

Dan harap diingat

rm -rf 12_angry_men_lone_holdout.*

akan menghapus file default juga, yang Anda butuhkan.

Aduh
sumber
0
find . -type f -name '*[0-9]x[0-9]*' -delete

Jalankan ini di direktori induk. Ini akan menghapus semua file yang memiliki digit diikuti oleh karakter 'x' diikuti oleh digit lain dalam namanya.

Masih hati-hati, ini mungkin menghapus file asli juga, jika namanya mengandung pola di atas (tidak mungkin). Jalankan terlebih dahulu tanpa '-delete' untuk melihat apakah Anda memiliki file yang memiliki nama seperti itu. Jika itu masalahnya, Anda hanya perlu menemukan pola yang lebih ketat.

Tamas
sumber