3

Как я могу проверить, является ли почтовый файл пустым или нет? Я не могу использовать if -s в bash, поскольку размер zip-файла не всегда равен нулю. если в zip-файле есть пустые каталоги, я хочу удалить его, либо извлечь его.

3 ответа3

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
1

Если вы запустите zipinfo -t foo.zip состояние выхода (от $?)выдаст ошибку, если в файле zip ничего нет. В версии, которую я использую (3.00), это будет 1 но я думаю, что это просто общий код ошибки, поэтому неоднозначность может вызвать другие проблемы.

Вам также придется иметь дело с текстовым выводом команды, который представляет собой строку с базовой информацией о файле. Я считаю, что этот ответ похож на один из приведенных выше.

Редактировать: Если вы хотите избежать неоднозначного возвращаемого значения (и у вас настроение для grep), вы можете получить вывод команды выше для "Очистить zipfile".

0

Если у вас установлен 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .