Если Вы действительно хотите распаковать их параллельно, Вы могли бы сделать
for i in *zip; do unzip "$i" & done
, Что однако, запустит процессы N для zip-файлов N. и мог быть очень тяжелым в Вашей системе. Для более управляемого подхода, запуская только 10 параллельных процессов за один раз, попробуйте это:
find . -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
Для управления количеством параллельных запущенных процессов, изменение -P
к тому, что Вы хотите. Если Вы не хотите, рекурсивно вызывают в подкаталоги, сделайте это вместо этого:
find . -maxdepth 1 -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
, С другой стороны, можно установить параллель GNU , как предложено @OleTange в комментариях и работать
parallel unzip ::: *zip
unzip \*.zip
или unzip '*.zip'
очевидное unzip *.zip
не работает, потому что оболочка расширяется, она к unzip foo.zip bar.zip ...
и unzip
интерпретирует первое имя файла как zip-файл и следующие имена файлов как файлы для извлечения из того zip-файла.
Однако unzip
немного необычно среди команд Unix, в которых это делает свои собственные расширения шарика. Если эти *
не будет расширен оболочкой, разархивируйте, то сделает это, и intepret все получающиеся имена файлов как zip-файлы, которые будут обработаны. Таким образом в этом особом случае, можно уйти без for
цикл или xargs
и т.п.
параллель GNU команда хорошо подходит для этого типа вещи. После:
$ sudo apt-get install parallel
Тогда
ls *.zip | parallel unzip
Это будет использовать столько ядер, сколько Вы имеете, заставляя каждое ядро напряженно трудиться с тем, чтобы разархивировать, пока они все не сделаны.
echo *.zip
вместо этого, чтобы препятствовать тому, чтобы возможный псевдоним ls крался в дополнительной информации. Однако это имеет ту же проблему как @Guru' s ответ, это повреждается на именах файлов, содержащих пробел.
– Ambar Jain
15.05.2020, 14:33
xargs
Параллель GNU делает не повреждение на именах файлов, содержащих пространство/вкладку/кавычку. Только если имена файлов содержат новые строки, необходимо будет проявить дополнительную заботу. Например, при помощи: parallel unzip ::: *.zip
– nktsamba
15.05.2020, 14:34
echo
настолько же плохо как использует ls
. Globbing и некоторое время цикл являются самыми безопасными.
– Remian8985
15.05.2020, 14:35
Не терминальный метод.
Просто выбирают zip-файлы, щелкают правой кнопкой по одному и выбирают extract here
. Можно выбрать все или просто много zip-файлов за один раз.
Можно использовать следующую команду:
Первый каталог изменения в терминале к каталогу, который содержит .zip файлы:
cd /path
Тогда выполняют эту команду для разархивации всех .zip файлов:
for z in *.zip; do unzip "$z"; done
Если у Вас есть многие .zip
файлы в Вашей папке, и Вы хотите распаковать всех их, тогда открывают терминал и переходят к Вашему использованию папки:
cd <path_to_folder>
Теперь использование эта команда для распаковки весь Вашего .zip
файл:
ls *.zip | xargs -n1 unzip
echo *.zip
вместо этого, чтобы препятствовать тому, чтобы возможное ls
псевдоним кралось в дополнительной информации, однако который все еще не устраняет пробельную проблему.
– Steven Elliott
15.05.2020, 14:36
ls
для сценариев, поскольку его вывод не четко определен между версиями. Вместо этого посмотрите на ответ от @terdon, поскольку это решает все проблемы этого решения.
– Remian8985
15.05.2020, 14:38
-exec \;
(можно выйти из точки с запятой, никакой потребности в кавычках), выполнит каждую команду последовательно.-exec +
лучше, но это won' t работают здесь с тех пор that' s не, какunzip
работы. – Scott Barta 15.05.2020, 14:36-exec
или-execdir
вместо того, чтобы передать по каналу кxargs
. Мало того, что более просто понять, но также и it' s также менее подверженный ошибкам и использование меньше системных ресурсов.find . -name '*.zip' -exec unzip {} ';'
(Необходимо заключить точку с запятой в кавычки.) – pdsafs df apk 15.05.2020, 14:36