Как пропустить разархивирование файла, который уже существует?

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

Вот код без какой-либо инструкции if:

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

zipfiles.txt похож на:

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

вывод равен

./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

Что такое хорошее решение?

1
задан 19 November 2018 в 22:23

2 ответа

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

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
ответ дан 19 November 2018 в 22:23

Используйте переключатель -n. Со страницы руководства по распаковке:

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

6
ответ дан 19 November 2018 в 22:23

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

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