Saya hanya ingin mendapatkan file dari direktori saat ini dan hanya mengeluarkan file .mp4 .mp3 .exe. Jadi saya pikir saya bisa melakukan ini:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
Tapi tidak, karena grep pertama akan menampilkan hanya mp4 maka 2 grep lainnya tidak akan digunakan.
Ada ide? PS, Menjalankan skrip ini di Slow Leopard.
shopt -s nullglob
dan kemudian hanya merujuk*.exe *.mp3 *.mp4
. Lihat mywiki.wooledge.org/ParsingLsJawaban:
Kenapa tidak:
Saya tidak yakin dari mana saya mempelajarinya - tetapi saya telah menggunakan ini.
sumber
ls: *.exe: No such file or directory
mis:ls *.{zip,tar.gz,tar} 2>/dev/null
Gunakan ekspresi reguler dengan
find
:Jika Anda memipipkan nama file:
Ini melindungi nama file yang mengandung spasi atau baris baru.
OS X
find
hanya mendukung pergantian ketika opsi-E
(ditingkatkan) digunakan.sumber
find . -iregex '.*\(mp3\|mp4\|exe\)'
mysupermp3.jpg
pertimbangkan untuk menambahkan$
di akhir regex dan\\.
sebelum ekstensiegrep
- grep yang diperluas - akan membantu di siniharus melakukan pekerjaan.
sumber
ls
ke terminal (atau dengan-C
opsi) menghasilkan output multi-kolom.ls
ke pipa (atau dengan-1
) memiliki output kolom tunggal. (Bandingkan keluaranls
denganls | cat
).cara termudah adalah dengan menggunakan ls
sumber
ls
tidak memiliki opsi diam.Untuk jaga-jaga: mengapa Anda tidak menggunakannya
find
?sumber
find . -name '*.mkv' -o -name '*.flv'
(menambahkan klausa -o sebanyak yang diperlukan). Saya membutuhkan.
untuk menunjukkan direktori dan bendera-name
tidak-iname
- saya di macOS 10.13.Tidak perlu grep. Shell wildcard akan melakukan triknya.
Jika sudah lari
maka gumpalan yang tak tertandingi akan dihapus sama sekali dan tidak dibiarkan di baris perintah tanpa ekspansi.
Jika Anda ingin globbing case-insensitive (jadi * .mp3 akan cocok dengan foo.MP3):
sumber
-R
opsi untuk daftar file yang cocok di subdirektori tetapi opsi tampaknya tidak berpengaruh dan saya masih hanya mendapatkan hasil direktori saat ini.Jika Anda masih mencari solusi alternatif:
Jangan ragu untuk menambahkan lebih banyak flag -e jika diperlukan.
sumber
Untuk pengguna OSX :
Jika Anda menggunakan
ls *.{mp3,exe,mp4}
, itu akan menimbulkan kesalahan jika salah satu ekstensi tersebut tidak memiliki hasil.Menggunakan
ls *.(mp3|exe|mp4)
akan mengembalikan semua file yang cocok dengan ekstensi itu, bahkan jika salah satu ekstensi memiliki hasil 0 .sumber
ls *.@(mp3|exe|mp4)
. Anda perlushopt -s extglob
ini untuk bekerja. Ngomong-ngomong,ls
tidak berguna juga, Anda bisa melakukannyaprintf '%s\n' *.@(mp3|exe|mp4)
.sumber
mdfind
menghasilkan pencarian terbaik / tercepat yang pernah ada!mdfind -name querystring | grep "\.h$"
menemukan semua header dengan quesrystring dalam judul file. pronto.ls -R | findstr ".mp3"
ls -R
=> daftar subdirektori secara rekursifsumber
Ini adalah satu contoh yang cocok untuk saya.
sumber