Как я могу проверить, является ли почтовый файл пустым или нет? Я не могу использовать if -s в bash, поскольку размер zip-файла не всегда равен нулю. если в zip-файле есть пустые каталоги, я хочу удалить его, либо извлечь его.
3 ответа
Если у вас установлены инструменты Info-ZIP (zip , unzip , zipinfo), вы можете использовать zipinfo для zip-файла и просто отправить вывод в /dev/null . Статус будет 0, если файл не пустой.
Так:
if zipinfo foo.zip > /dev/null; then
echo not empty
else
echo empty
fi
Если вы запустите zipinfo -t foo.zip состояние выхода (от $?)выдаст ошибку, если в файле zip ничего нет. В версии, которую я использую (3.00), это будет 1 но я думаю, что это просто общий код ошибки, поэтому неоднозначность может вызвать другие проблемы.
Вам также придется иметь дело с текстовым выводом команды, который представляет собой строку с базовой информацией о файле. Я считаю, что этот ответ похож на один из приведенных выше.
Редактировать: Если вы хотите избежать неоднозначного возвращаемого значения (и у вас настроение для grep), вы можете получить вывод команды выше для "Очистить zipfile".
Если у вас установлен jar вы можете использовать опцию -t :
jar -tvf file.zip
Директоры будут иметь косые черты, так что вы можете передать их в grep:
if jar -tvf file.zip | egrep -v '/$' > /dev/null; then # we have some files!
unzip file.zip
else
rm -f file.zip
fi
