bash: обратное (т.е. НЕ) расширение подстановочного знака оболочки?
Есть ли способ обработки инверсного расширения оболочки bash v4, т.е. обрабатывать все файлы НЕ как подстановочный знак? Мне необходимо rm
все файлы, которые не имеют формат 'Folder-???'
в этом случае и было интересно, если есть более короткий (т.е. встроенный) способ, то делать
for file in *
do
[[ $i =~ \Folder-...\ ]] && rm '$i'
done
петля. (пример не работает, кстати...)
Просто из любопытства изучения Bash...
3 ответа
@Dimitre имеет правильный ответ для Bash. Портативное решение заключается в использовании case
:
for file in *; do
case "$file" in
Folder-???) : ;;
*) do stuff here ;;
esac
done
Другое решение bash - использовать оператор сопоставления с образцом внутри [[ ... ]]
( документация)
for file in *; do
if [[ "$file" != Folder-??? ]]; then
do stuff here
fi
done
Если вы в порядке с find
Вы можете инвертировать find
Предикаты с -not
,
Как в
find -not -name 'Folder-???' -delete
(обратите внимание, что это совпадает рекурсивно среди других отличий от соответствия глобуса оболочки, но я предполагаю, что вы знаете, find
достаточно хорошо)