Jawaban:
lstidak melakukan pencocokan pola pada nama file. Itu hanya daftar isi direktori dan file yang diberikan sebagai argumen.
Shell Anda di sisi lain memiliki fitur yang disebut globbing atau nama file generasi yang memperluas pola menjadi daftar file yang cocok dengan pola itu.
Di sini pola gumpalan itu akan menjadi abc*.zip( *menjadi wildcard yang mewakili sejumlah karakter ).
Anda akan meneruskannya ke perintah apa pun yang Anda suka seperti printfuntuk dicetak:
printf '%s\n' abc*.zip
Anda juga bisa meneruskannya ke ls -luntuk menampilkan atribut dari file-file itu:
ls -ld abc*.zip
(kita perlu -dkarena jika salah satu dari file tersebut adalah dari direktori jenis , lsakan membuat daftar isinya sebaliknya).
Atau untuk unzipmengekstraknya jika hanya unzipbisa mengekstraksi lebih dari satu file sekaligus. Sayangnya tidak, jadi Anda harus menggunakan xargs -n1atau formengulang:
printf '%s\0' abc*.zip | xargs -r0n1 unzip
Atau:
for file in abc*.zip; do unzip "$file"; done
Tetapi pada kenyataannya, unzipmenjadi lebih seperti port dari perintah MS-DOS, unzipitu sendiri akan memperlakukan argumennya sebagai sebuah bola. Dengan kata lain, unzip 'abc*.zip'tidak akan meng-unzip file yang dipanggil abc*.zip(nama file yang benar-benar valid di Unix, bukan pada sistem operasi Microsoft), tetapi file-file tersebut cocok dengan abc*.zippolanya, jadi Anda sebenarnya ingin:
unzip 'abc*.zip'
(Sebenarnya pendekatan kami xargsdan di foratas akan salah, karena jika ada file yang dipanggil abc*.zipmisalnya, unzipakan memperlakukannya sebagai pola! Lihat bsdtarcara yang lebih aneh untuk mengekstrak ziparsip)
Untuk pencocokan yang tidak sensitif, Anda dapat menggunakan [aA][bB][cC]*.[zZ][iI][pP]portable. Beberapa shell telah memperpanjang operator globbing untuk pencocokan case-sensitive:
zsh:
setopt extendedglob
ls -ld (#i)abc*.zip
Atau:
ls -ld ((#i)abc)*.zip
jika Anda hanya ingin abcbagiannya menjadi case-sensitive.
ksh93:
ls -ld ~(i)abc*.zip
atau:
ls -ld ~(i:abc)*.zip
dengan bash.
shopt -s nocaseglob
ls -ld abc*.zip
(tidak ada cara untuk memiliki hanya bagian-bagian dari kasus gumpalan yang sensitif di sana selain dengan menggunakan sintaks portabel).
dengan yash:
set +o case-glob
ls -ld abc*.zip
komentar yang sama seperti di bashatas.
ls abc*.zip
Namun ini akan gagal jika ada terlalu banyak file (ada batas untuk ekspansi shell dalam hal berapa banyak argumen yang dapat diperluas ke).
find . -name "abc*.zip"
Ini mungkin yang paling universal. Kutipan harus ada di sana. Dengan beberapa findimplementasi, Anda juga dapat menggunakan -inamealih-alih -nameuntuk pencarian case-sensitive ( aBc<date>.ZIPjuga cocok).
ls | grep -x "abc.*\.zip"
Pikirkan .*dan \.karena penggunaan grep filter adalah regex yang berbeda dari notasi wildcard yang digunakan shell untuk ekspansi. Gunakan grep -iuntuk pencarian case-sensitive.
execve()panggilan sistem.
findakan mencari file-file di subdirektori juga. Gunakan find . ! -name . -prune -name 'abc*.zip' -printatau find . -maxdepth 1 -name 'abc*.zip'jika finddukungan Anda -maxdepthsuka pada GNU atau BSD atau find . -depth 1 -name 'abc*.zip'jika Anda findmendukung -depth <n>sejenisnya pada beberapa BSD untuk membatasi ke direktori saat ini.
$ ls ../*.abekerja untuk saya (daftar arsip dalam direktori induk).
Anda harus menentukan direktori tempat lspencarian dalam sebuah contoh
ls -la ~/file*.*
ls -la ./file*.*
itu berfungsi untuk saya, tetapi jelas itu tidak mendukung pencarian berdasarkan pola
abcdan diakhiri dengan .zip.
ls -1 | grep "abc$(your_date).zip"?