有沒有辦法處理invers bash v4 shell擴展,即。處理所有文件不像通配符?我需要rm
是在這種情況下,格式'Folder-???'
不是所有的文件,並想知道如果有一個較短的(即內置)的方式,然後做一個bash:反向(即不)shell通配符擴展?
for file in *
do
[[ $i =~ \Folder-...\ ]] && rm '$i'
done
循環。 (例子不工作,順便說一句...)
只是出於bash的學習好奇心......
有沒有辦法處理invers bash v4 shell擴展,即。處理所有文件不像通配符?我需要rm
是在這種情況下,格式'Folder-???'
不是所有的文件,並想知道如果有一個較短的(即內置)的方式,然後做一個bash:反向(即不)shell通配符擴展?
for file in *
do
[[ $i =~ \Folder-...\ ]] && rm '$i'
done
循環。 (例子不工作,順便說一句...)
只是出於bash的學習好奇心......
shopt -s extglob
rm -- !(Folder-???)
+1:不知道那個。 –
@Dimitre有right answer對於bash。一種便攜式解決方案是使用case
:
for file in *; do
case "$file" in
Folder-???) : ;;
*) do stuff here ;;
esac
done
另一個bash的解決方案是使用圖案匹配操作者內部[[ ... ]]
(documentation)
for file in *; do
if [[ "$file" != Folder-??? ]]; then
do stuff here
fi
done
Hi @glenn,只是在兩種情況下都添加了:'case varname ...'和'[[...]]內部的_varname_'不執行shell字段/字段分割,因此標識符不需要是引用(並且在這方面的引用當然也不是有害的)。 –
如果你是確定與find
,可以反轉find
' s的預言與-not
。
正如
find -not -name 'Folder-???' -delete
(注意這個遞歸匹配其他差異中殼水珠匹配,但我相信你知道find
不夠好)
恐怕你不能做到這一點,有使用正則表達式代替。 – TMS
可能的重複[如何在unix/linux shell中進行模式匹配時使用反向或負向通配符?](http://stackoverflow.com/questions/216995/how-can-i-use-inverse-or-negative -wildcards-when-pattern-matching-in-a-unix-linu) – Johan
@Tomas untrue; extglobs是可逆的。 –