Как проверить, существует ли файл?

У меня есть цикл for, который распаковывает все .zip в этот каталог. Я хочу проверить, существует ли уже распакованный файл, и разархивировать только зашифрованные файлы.

Вот код без какого-либо состояния:

for i in `cat zipfiles.txt`; do output_dir=$(dirname $i) unzip -d $output_dir $i done

zipfiles.txt is например:

./CSAN/S1A.zip ./MEZO/S1B.zip

output is

./CSAN/S1A.SAFE ./MEZO/S1B.SAFE

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

for i in `cat zipfiles.txt`; do file="${dir%/}.SAFE" if [ -e "$file" ] then echo "It exists" else output_dir=$(dirname $i) unzip -d $output_dir $i fi done

Какое хорошее решение?

0
задан 12 January 2018 в 05:32

4 ответа

Используйте переключатель -n. На странице unzip man:

-n никогда не перезаписывать существующие файлы. Если файл уже существует, пропустите извлечение этого файла без запроса. По умолчанию разархивируйте запросы перед извлечением любого файла, который уже существует; пользователь может выбрать переписать только текущий файл, перезаписать все файлы, пропустить извлечение текущего файла, пропустить извлечение всех существующих файлов или переименовать текущий файл.
2
ответ дан 17 July 2018 в 23:20

Хорошо, я нашел правильное решение:

for i in `cat zipfiles.txt`; do output_dir=$(dirname $i) echo $output_dir file="${i/zip/SAFE}" echo $file if [ -e "$file" ] then echo "It exists" else unzip -d $output_dir $i fi done
0
ответ дан 17 July 2018 в 23:20

Используйте переключатель -n. На странице unzip man:

-n никогда не перезаписывать существующие файлы. Если файл уже существует, пропустите извлечение этого файла без запроса. По умолчанию разархивируйте запросы перед извлечением любого файла, который уже существует; пользователь может выбрать переписать только текущий файл, перезаписать все файлы, пропустить извлечение текущего файла, пропустить извлечение всех существующих файлов или переименовать текущий файл.
2
ответ дан 24 July 2018 в 13:51

Хорошо, я нашел правильное решение:

for i in `cat zipfiles.txt`; do output_dir=$(dirname $i) echo $output_dir file="${i/zip/SAFE}" echo $file if [ -e "$file" ] then echo "It exists" else unzip -d $output_dir $i fi done
0
ответ дан 24 July 2018 в 13:51
  • 1
    Это существенно отличается от команд в вашем вопросе. Не могли бы вы объяснить, что вы изменили? – wjandrea 12 January 2018 в 05:35

Другие вопросы по тегам:

Похожие вопросы: