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