Saya ingin mencari semua file dengan panjang nama file.
Sebagai contoh jika saya ingin mencari file panjang 1, seperti a.go
, b.go
.
Saya meletakkan:
grep '.\{1\}' file
Tetapi ini tidak berhasil. Perintah apa yang dapat saya gunakan untuk mencari file berdasarkan panjang nama file?
a.go
adalah nama file dengan panjang 4.a
adalah nama file dengan panjang 1. Ini adalah Unix, bukan DOS di mana nama dan ekstensi terpisah dan implisit.
selalu menjadi bagian dari nama file.Jawaban:
grep
mencari pola dalam isi file. Jika Anda ingin melihat nama - nama file, Anda bisa menggunakan shell glob (jika Anda ingin mempertimbangkan hanya nama file di direktori saat ini):(Ngomong-ngomong, itu shell yang mengevaluasi glob, bukan
echo
perintah.)Jika Anda ingin melihat direktori secara berulang, dimulai dengan direktori saat ini, alat yang digunakan adalah
find
:(Perhatikan bahwa Anda harus mengutip pola untuk mencegah shell mengevaluasinya sebagai gumpalan sebelum
find
dipanggil.)sumber
Jika Anda hanya ingin menemukan nama file, Anda dapat menggunakan perintah berikut:
Itu akan berjalan
find
, mengeluarkan nama file atau direktori menggunakanbasename
dan kemudian mencari nama file atau direktori yang setidaknya 100 karakter. Jika Anda ingin mencari nama file dengan panjang yang tepat, gunakan{100}
sebagai ganti{100,}
.Jika Anda ingin menemukan nama file termasuk path, lakukan ini:
Ini akan mengembalikan nama file termasuk jalur relatif ke tempat Anda menjalankan perintah find.
sumber
Pertama-tama,
grep
mencari melalui isi file, itu tidak akan mencari nama file. Untuk itu kamu maufind
. Itu tidak memiliki opsi untuk mengatur panjang nama file tetapi Anda dapat menguraikan output untuk mendapatkan apa yang Anda inginkan. Berikut adalah beberapa contoh yang saya jalankan di direktori yang berisi file-file berikut:Mencari file di direktori ini menghasilkan:
Jadi, untuk menemukan file dengan panjang X, kita harus menghapus path dan hanya mencocokkan karakter setelah yang terakhir
/
:The
sed
perintah hanya menghilangkan./
. The-P
bendera mengaktifkan Perl Regular Expressions Kompatibel yang diperlukan untuk{n}
yang merupakan hal yang PCRE dan$
berarti "cocok dengan akhir string".Anda juga bisa melakukan ini:
Itu bagus untuk angka kecil mengetik 15 titik untuk mencocokkan nama file dengan panjang 15 tidak sangat efisien.
Terakhir, jika Anda ingin mengabaikan ekstensi dan hanya mencocokkan nama file, lakukan ini (seperti yang disarankan @slm):
Namun, ini juga akan menemukan file seperti
a.bo.go
. Ini lebih baik jika nama file Anda dapat mengandung lebih dari satu.
:CATATAN: Solusi di atas mengasumsikan bahwa Anda memiliki nama file yang relatif waras yang tidak mengandung karakter baris baru, dll. Ini juga akan menghitung tidak mengabaikan spasi dalam nama file saat menghitung panjang yang mungkin bukan yang Anda inginkan. Jika salah satu dari ini adalah masalah, beri tahu saya dan saya akan memperbarui jawaban saya.
sumber
Anda tidak menentukan tetapi jika file berada dalam struktur direktori yang dapat Anda gunakan
find
untuk mencari file yang panjangnya 1, dengan bantuangrep
:Contoh
sumber
ggrep
: heystephenwood.com/2013/09/install-gnu-grep-on-mac-osx.html . Sadari juga bahwa Q ini tidak ditandai sebagai OSX sehingga penggunaannyagrep
tepat.Saya akan menggunakan sesuatu seperti ini.
Jadi, jika Anda menempatkan dua "?" maka Anda mencari nama file dengan dua karakter dan ekstensi.
sumber
Saat Anda ingin menggunakan pengekspresian reguler dalam perintah find, Anda harus menggunakan
""
seperti:untuk penggunaan kasus Anda:
Anda harus mengganti jalur Anda yang sebenarnya dengan jalur Anda,
-a
berartiAnd
-type f
Anda hanya mencari file biasa.?
dalam permintaan Anda berarti satu karakter pembajak seperti DOS jika Anda ingat.sumber
ls ?.*
harus memberi Anda hasil yang diinginkan.sumber