Temukan semua file dengan nama file yang dimulai dengan string yang ditentukan?

149

Saya memiliki direktori dengan sekitar 100.000 file di dalamnya, dan saya ingin melakukan beberapa fungsi pada semua file yang dimulai dengan string tertentu, yang mungkin cocok dengan puluhan ribu file.

saya telah mencoba

ls mystring*

tetapi ini kembali dengan kesalahan bash 'Terlalu banyak argumen'. Rencana saya selanjutnya adalah menggunakan

find ./mystring* -type f

tetapi ini memiliki masalah yang sama.

Kode perlu terlihat seperti

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done
RikSaunderson
sumber
Alih-alih forloop, Anda harus menyalurkan findke while.
Dijeda sampai pemberitahuan lebih lanjut.

Jawaban:

277

menggunakan

find . -name 'mystring*'
Sergio Tulentsev
sumber
10
dan untuk menjalankan beberapa fungsi "find. -name 'mystring *' -exec [command]" misalnya hapus "find. -name 'mystring *' -exec rm {} \;"
Eldar
2
Di mana {} adalah placeholder untuk nama file :-) (sehingga Anda dapat membuat tindakan Anda sendiri)
Sergio Tulentsev
1
Ini sepertinya mengembalikan semua hasil yang berisi string? The
Brian Z
7
... atau find . -iname 'mystring*'untuk pencarian case-sensitive.
Frank Nocke
OP merujuk ke satu direktori jadi masukkan -maxdepth 1sebelum -nameuntuk membatasi menemukan ke folder saat ini
jacanterbury
27
ls | grep "^abc"  

akan memberi Anda semua file awal (yang dibutuhkan OP secara khusus) dengan substring tersebut abc.
Ini hanya beroperasi pada direktori saat ini sedangkan findberoperasi secara rekursif ke dalam sub folder.

Untuk digunakan findhanya untuk file yang dimulai dengan string Anda, cobalah

Temukan . -nama 'abc' *

jacanterbury
sumber
4

Jika Anda ingin membatasi pencarian Anda hanya untuk file Anda harus mempertimbangkan untuk digunakan -type fdalam pencarian Anda

coba gunakan juga -inameuntuk pencarian case-insensitive

Contoh:

find /path -iname 'yourstring*' -type f

Anda juga dapat melakukan beberapa operasi pada hasil tanpa tanda pipa atau xarg

Contoh:

Cari file dan tampilkan ukurannya dalam MB

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
matson kepson
sumber