Попробуйте это:
for file in *.zip ; do
wcout=$(wc -c "$file")
if [[ ${wcout%% *} -eq 9 ]] ; then
# some commands
fi
done
Оператор с переменным расширением %%
удаляет все, что соответствует патту после него. Это шаблон глобуса, а не регулярное выражение.
Противоположный естественному хорошему пониманию типичных программистов оператор ==
в BASH сравнивает строки, а не цифры.
В качестве альтернативы (после комментария) Вы можете:
for file in *.zip ; do
wcout=$(wc -c < "$file")
if [[ ${wcout} -eq 9 ]] ; then
# some commands
fi
done
Дополнительное наблюдение состоит в том, что если BASH не может расширяться *.zip
, как нет ZIP файлы в текущем каталоге будет проходить «* .zip» в $file
и пусть одна итерация цикла. Это приводит к ошибке, сообщаемой командой wc
. Поэтому было бы желательно добавить:
if [[ -e ${file} ]] ; then ...
как механизм предупреждения.
Комментарии приводят к другой форме этого раствора (плюс я добавил мою безопасность механизма):
for file in *.zip ; do
if [[ -e "$file" && (($(wc -c < "$file") == 9)) ]] ; then
# some commands
fi
done
Вы понимаете, это цикл по всем файлам, которые заканчиваются с '.zip' в текущем каталоге? Если вы не добавили это расширение в текстовые файлы, это вряд ли сработает. –
Он будет «работать», он просто будет сообщать «размер» zip-файла, который здесь может быть или не быть значимым. Также '* .zip' не хочет быть в обратном направлении. Это не исполняемая команда. –
В этом фрагменте также есть несколько других проблем. Вам нужно пространство между '9' и']] ', пространство между' == 'и' 9', и вам нужно обернуть 'echo ' wc' в '$()' для его выполнения. Предоставив нам ошибки, которые вы получили из этого фрагмента и запустили его через shellcheck.net, помогли бы. –