Dalam hal ini, GNU find
memungkinkan Anda melakukan semua hal ini sekaligus, menghilangkan pipa dan kemungkinan penguraian ls
:
find . -maxdepth 1 -name '[^.]*' \
-regextype posix-extended -regex "MYPATTERN" \
-printf 'SOMEPREFIX %f SOMESUFFIX\n'
( find
tentu saja bukan cara yang baik untuk memodifikasi output dari perintah lain!)
Beberapa catatan:
-maxdepth 1
dan -name [^.]*
membuat pencocokan nama berfungsi sama dengan dataran ls
(atau ls .
). Anda dapat menggunakan gumpalan gaya-shell apa pun, tetapi perhatikan bahwa "*" akan cocok dengan yang pertama "." dalam nama † tidak seperti bash
, jadi [^.]*
berarti apa pun yang tidak memiliki arahan "."
- MYPATTERN adalah POSIX ERE yang tepat (tipe standarnya adalah Emacs, lihat di sini ), tetapi itu harus cocok dengan seluruh nama file jadi gunakan sesuatu seperti
.*thing.*
alih - alih hanyathing
- Anda mungkin dapat menggunakan salah satu
-name
/ -regex
bukan keduanya (mis. -regex "[^.]. MYPATTERN. "
-printf
mendukung banyak hal , %n
adalah file atau nama direktori tanpa hiasan
† (ini dapat bergantung pada versi Anda find
, periksa bagian "KINERJA STANDAR" pada halaman manual Anda)
Sebagai alternatif yang mungkin tanpa program eksternal yang diperlukan, bash
memiliki compgen
yang, antara lain, memperluas gumpalan, setara ls
dengan yang tanpa opsi:
compgen -P "someprefix>" -S "<somesuffix" -G "pattern"
Ini menangani nama file dengan spasi putih, termasuk baris baru. compgen -G "*"
harus memberikan output yang sama dengan yang biasa ls
(tetapi perhatikan bahwa itu ls *
adalah hal yang sama sekali berbeda). Anda masih perlu grep
, dan ini mungkin atau mungkin tidak menyelesaikan masalah, tetapi perlu disebutkan.
ls
- itu juju buruk. Juga, haruskah demikiangrep
? Dan bisakah Anda memberikan beberapa contoh output?