У меня есть более 200 .zip
файлов в одной папке. Я не хочу распаковывать их по одному. Я хочу извлечь те, которые используют одну команду или скрипт. Как это сделать.
Если Вы действительно хотите распаковать их параллельно, Вы могли бы сделать
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
параллель GNU команда хорошо подходит для этого типа вещи. После:
$ sudo apt-get install parallel
Тогда
ls *.zip | parallel unzip
Это будет использовать столько ядер, сколько Вы имеете, заставляя каждое ядро напряженно трудиться с тем, чтобы разархивировать, пока они все не сделаны.
Можно использовать следующую команду:
Первый каталог изменения в терминале к каталогу, который содержит .zip файлы:
cd /path
Тогда выполняют эту команду для разархивации всех .zip файлов:
for z in *.zip; do unzip "$z"; done
Если у Вас есть многие .zip
файлы в Вашей папке, и Вы хотите распаковать всех их, тогда открывают терминал и переходят к Вашему использованию папки:
cd <path_to_folder>
Теперь использование эта команда для распаковки весь Вашего .zip
файл:
ls *.zip | xargs -n1 unzip
Можно использовать, находят с -exec
как так,
find . -name "*.zip" -exec unzip {} \;
Это будет работа, если файл будет иметь пространство на имя.
Не терминальный метод.
Просто выбирают zip-файлы, щелкают правой кнопкой по одному и выбирают extract here
. Можно выбрать все или просто много zip-файлов за один раз.
unzip \*.zip
или unzip '*.zip'
очевидное unzip *.zip
не работает, потому что оболочка расширяется, она к unzip foo.zip bar.zip ...
и unzip
интерпретирует первое имя файла как zip-файл и следующие имена файлов как файлы для извлечения из того zip-файла.
Однако unzip
немного необычно среди команд Unix, в которых это делает свои собственные расширения шарика. Если эти *
не будет расширен оболочкой, разархивируйте, то сделает это, и intepret все получающиеся имена файлов как zip-файлы, которые будут обработаны. Таким образом в этом особом случае, можно уйти без for
цикл или xargs
и т.п.