Saya telah mencari perintah yang akan mengembalikan file dari direktori saat ini yang berisi string dalam nama file. Saya telah melihat locate
dan find
perintah yang dapat menemukan file dimulai dengan sesuatu first_word*
atau diakhiri dengan sesuatu *.jpg
.
Bagaimana saya bisa mengembalikan daftar file yang berisi string dalam nama file?
Misalnya, jika 2012-06-04-touch-multiple-files-in-linux.markdown
file dalam direktori saat ini.
Bagaimana saya bisa mengembalikan file ini dan lainnya yang berisi string touch
? Menggunakan perintah sepertifind '/touch/'
man grep
, pertanyaan kedua denganman find
. mengapa Anda google daripada menggunakan pria, saya tidak tahu.Jawaban:
Gunakan
find
:find . -maxdepth 1 -name "*string*" -print
Ini akan menemukan semua file di direktori saat ini (hapus
maxdepth 1
jika Anda menginginkannya bersifat rekursif) yang berisi "string" dan akan mencetaknya di layar.Jika Anda ingin menghindari file yang mengandung ':', Anda dapat mengetik:
find . -maxdepth 1 -name "*string*" ! -name "*:*" -print
Jika Anda ingin menggunakan
grep
(tapi saya pikir itu tidak perlu sejauh Anda tidak ingin memeriksa konten file) Anda dapat menggunakan:ls | grep touch
Tapi, saya ulangi,
find
adalah solusi yang lebih baik dan lebih bersih untuk tugas Anda.sumber
find
adalah alat yang sangat kuat, itu pasti 'panjang'. :)-print
karena ini adalah perilaku default dan.
karena ini adalah folder default di mana ia memeriksa.find . -name "*string*"
Bekerja dengan baik juga. Menghapus.
melempar kesalahan pada saya. Terima kasih lagi @Zororax.Gunakan grep sebagai berikut:
-R
berarti berulang. Jika Anda lebih suka tidak masuk ke subdirektori, lewati saja.-i
berarti "abaikan case". Anda mungkin menemukan ini patut dicoba juga.sumber
:
. Apakah ada cara untuk menahannya? Mungkin menggunakan opsi?grep -R "touch" . | cut -d ":" -f 2
grep -R "touch" . | cut -d ":" -f 1
(maaf pasti salah membaca Anda).grep
baik mengembalikan file dengan isi dan nama file yang mengandungtouch
atau konten yang mengandungtouch
, saya belum yakin yang terjadi, belum. Dari daftar file yang dikembalikan, setengahnya berisitouch
judul dan setengah lainnya berisi dalamtouch
tubuh, bukan judul. Baru menyadari ini.The
-maxdepth
pilihan harus sebelum-name
pilihan, seperti di bawah ini.,sumber
Ini akan mencari seluruh
$HOME
(yaitu/home/username/
) sistem untuk setiap file bernama "hello.c" dan menampilkan nama path mereka:Namun, itu tidak akan cocok
HELLO.C
atauHellO.C
. Untuk mencocokkan adalah tidak peka huruf besar-kecil,-iname
pilihan sebagai berikut:Output sampel:
Lewati
-type f
pilihan untuk hanya mencari file:The
-iname
bekerja baik pada GNU atau BSD (termasuk OS X) perintah versi find. Jika versi perintah find Anda tidak mendukung-iname
, coba sintaks berikut menggunakangrep
perintah:ATAU coba
Output sampel:
sumber
Jika string ada di awal nama, Anda bisa melakukan ini
sumber
compgen
bukan palu yang tepat untuk paku ini. Alat yang jarang digunakan ini dirancang untuk mencantumkan perintah yang tersedia , dan karena itu, ia mencantumkan file dalam direktori saat ini (yang bisa berupa skrip) dan tidak dapat muncul kembali atau melihat melewati awal nama file atau mencari isi file, membuatnya menjadi kebanyakan tidak berguna.Alternatif dari banyak solusi yang telah disediakan adalah memanfaatkan glob
**
. Saat Anda menggunakanbash
opsiglobstar
(shopt -s globstar
) atau menggunakanzsh
, Anda bisa menggunakan glob**
untuk ini.melakukan pencarian direktori rekursif untuk file bernama
bar
(berpotensi termasuk filebar
dalam direktori saat ini). Perhatikan bahwa ini tidak dapat digabungkan dengan bentuk globbing lain dalam segmen jalur yang sama; dalam hal ini,*
operator kembali ke efek biasanya.Perhatikan bahwa ada perbedaan tipis antara
zsh
dan dibash
sini. Meskipunbash
akan melintasi tautan lunak ke direktori,zsh
tidak akan. Untuk ini, Anda harus menggunakan glob***/
dizsh
.sumber
sumber
sumber