[英]bash filename globbing - operate on files starting with capital
假設我有一個包含以下jpeg文件的文件夾:
adfjhu.jpg Afgjo.jpg
Bdfji.jpg bkdfjhru.jpg
Cdfgj.jpg cfgir.jpg
Ddfgjr.jpg dfgjrr.jpg
如何刪除或列出以大寫字母開頭的文件?
這可以通過find
, grep
和xargs
的組合來解決。
但是在bash中可以使用普通的文件循環/模式匹配嗎?
由於(據我所知)LANG設置為en_US
和整理順序,下面的cmd不起作用。
$ ls [A-Z]*.jpg
Afgjo.jpg Bdfji.jpg bkdfjhru.jpg Cdfgj.jpg cfgir.jpg Ddfgjr.jpg dfgjrr.jpg
這種作品
$ ls +(A|B|C|D)*.jpg
Afgjo.jpg Bdfji.jpg Cdfgj.jpg Ddfgjr.jpg
但我不想為所有字符AZ做這個通用解決方案!
這可能嗎?
歡呼// Fredrik
您應該將您的語言環境設置為C
(或POSIX
)語言環境。
$ LC_ALL=C ls [A-Z]*.jpg
要么
$ LC_ALL=C ls [[:upper:]]*.jpg
在此處閱讀更多信息: http : //www.opengroup.org/onlinepubs/007908799/xbd/locale.html
使用帶有字符類的括號表達式:
ls -l [[:upper:]]*
有關字符類和其他信息的列表,請參閱man 7 regex
。
從該頁面:
在括號表達式中,'[:'和':]'中包含的字符類的名稱代表屬於該類的所有字符的列表。 標准字符類名稱是:
alnum digit punct alpha graph space blank lower upper cntrl print xdigit
使用grep
:
ls | grep -e ^[A-Z]
如果你想更多地使用for
循環:
for i in $(ls | grep -e ^[A-Z]); do echo $i ;done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.