У меня есть цикл 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
Что такое хорошее решение?
Хорошо, я нашел правильное решение:
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
Используйте переключатель -n
. Со страницы руководства по распаковке:
-n никогда не перезаписывайте существующие файлы. Если файл уже существует, пропустите извлечение этого файла без запроса. По умолчанию разархивируйте запросы перед извлечением любого файла, который уже существует; пользователь может выбрать перезапись только текущего файла, перезаписать все файлы, пропустить извлечение текущего файла, пропустить извлечение всех существующих файлов или переименовать текущий файл.