У меня есть тысячи .zip файлов в одной папке, я хочу извлечь тех, которые используют команду или сценарий, каждый .zip файл к нему собственная папка. Я хочу выполнить разархивировать процесс многократно. Как я могу сделать это?
Это будет добиваться цели, работать, это на терминале
for f in *.zip; do unzip $f -d ${f%.*}; done
хорошо переопределило ответ, учитывающий комментарий:
В одном файле, названном unzip.sh, помещает этот код:
#!/bin/bash
LEN=${#}
COUNT=0
PROCESSES=20
ITERATE=$(( LEN/PROCESSES ))
for ((i=0;i<=ITERATE;i++))
do
LOWER=$(( i*PROCESSES+1 ))
HIGHER=$(( (i+1)*PROCESSES ))
./aux.sh ${@:$LOWER:$HIGHER} &!
done
В одном файле, названном aux.sh, помещает этот код:
#!/bin/bash
for f in $@; do unzip $f -d ${f%.*}; done
Не забывают устанавливать оба файла с полномочиями выполнения путем ввода в терминале: chmod +x unzip.sh aux.sh
Теперь все, что необходимо сделать, выполняет сценарий путем ввода в терминале: ./unzip.sh *.zip
xargs
с -P n
может использоваться для запущения программы параллельно для нескольких файлов. Следующее, например, выполняет 8 экземпляров unzip
параллельно.
cd directory-with-zip-files
find . -name '*.zip' -print0 | xargs -0 -n 1 -P 8 unzip
Если бы файлы в zip-файлах находятся в их соответствующих папках, более легкое решение состояло бы в том, чтобы ввести это в открытом терминале папки zip-файлов:
разархивировали "*.zip"