我有一些 Unix 命令查找具有相應 jpg 檔案的 mov 檔案:
find . -name '*.[Mm][Oo][Vv]' -exec sh -c '
for mov; do
for jpg in "${mov%.*}".[Jj][Pp][Gg]; do
if test -f "$jpg"; then
echo "$mov"
fi
break
done
done' sh {}
當前代碼僅搜索 .jpg(或大寫)作為檔案擴展名,但我需要擴展它以支持以“.jpeg”結尾的檔案。
我修改了代碼說:
for jpg in "${mov%.*}".[Jj][Pp][Ee]?[Gg]; do
我認為應該可以有一個可選的“E或e”,但這不起作用。
我可以改用這個
for jpg in "${mov%.*}".[Jj][Pp]*[Gg]; do
這不是很安全,因為它會在那個位置接受更多的 tha e 和 E。
任何想法如何修改運算式以在 reg exp 中添加可選的 e/E?
uj5u.com熱心網友回復:
該extglob功能足以滿足此要求。shopt -s extglob在 using bash( not ) 時運行sh將讓您 use?([Ee])來參考[Ee].
更好的是,當我們設定shopt標志時,我們可以設定nocaseglob以便您可以使用*.jp?(e)g,而無需顯式字符類。(與此find等效的是更改-name為-iname,以下是另外的)。
find . -iname '*.mov' -exec bash -c '
shopt -s extglob nocaseglob
for mov; do
for jpg in "${mov%.*}".jp?(e)g; do
if test -f "$jpg"; then
printf "%s\n" "$mov"
fi
break
done
done' bash {}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/509828.html
標籤:重击壳球体
下一篇:將BASH腳本轉換為SH腳本
