Как я могу проверить, является ли почтовый файл пустым или нет? Я не могу использовать 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