Извлечение нескольких типов файлов, игнорируя ошибки
Системная информация:
aggitan@moneque:~$ uname -a
Linux moneque 2.6.32-25-generic #44-Ubuntu SMP Fri Sep 17 20:05:27 UTC 2010 x86_64 GNU/Linux
aggitan@moneque:~$ 7z
7-Zip 9.04 beta Copyright (c) 1999-2009 Igor Pavlov 2009-05-30
p7zip Version 9.04 (locale=en_US.utf8,Utf16=on,HugeFiles=on,2 CPUs)
У меня есть папка с 68 архивами, начиная с.rar, .ace и.zip.
Я хочу извлечь все эти файлы, используя их имя папки в качестве первого каталога ("Извлечь здесь")
Если я использую файл-ролик, он останавливается при первой ошибке, для файла-ролика не появляется флаг "игнорировать ошибку".
Если я использую 7zip, он выдает все в текущую папку и не использует чистые папки
Как я могу извлечь все в отдельные папки, не проливая все в текущий каталог?
3 ответа
for i in *; do mkdir "$i.extracted"; (cd "$i.extracted" && 7z x "../$i") || echo "Error with $i"; done
Я не знаю ни о каком прямом решении, но с помощью небольшого цикла bash вы можете сделать это в терминале (если, как кажется из вашего вопроса, 7zip может делать все, что вы хотите, кроме извлечения в папку на основе имени файла). Попробуйте (в каталоге с архивами):
for FILE in *.*; do DIR=${FILE%.*}; mkdir $DIR && 7z x -o$DIR $FILE ; done
${FILE%.*}
извлекает имя файла без расширения.
Небольшой сценарий оболочки может прийти на помощь.
#! /bin/bash
for archive in "$@"; do (
archive_dir="$(cd $(dirname "$archive"); pwd -P)"
archive_name="$(basename "$archive")"
# make a directory by appending `.d` to the archive file name
name="${archive_name}.d"
mkdir -p "$name"
cd "$name"
# extract contents with full path,
# replace 'x' with 'e' to extract into $name directory
7z x "${archive_dir}/${archive_name}"
); done
Вставьте вышеперечисленное в файл extract.sh
(в каталоге, куда вы хотите извлечь файлы), а затем сделайте его исполняемым:
chmod +x ./extract.sh
Сценарий создает каталог для каждого архива, указанного в командной строке, добавляя .d
к его имени файла (например, для архиваstuff.zip
это создаст каталог stuff.zip.d
), а затем извлекает в него файлы из архива.
Вы можете вызвать его в терминале следующим образом (используйте групповые символы для извлечения нескольких архивов за один раз):
./extract.sh stuff.zip stuff2.rar
Отказ от ответственности: не тестировался, поэтому попробуйте его с одним или двумя примерами архивов, прежде чем делать большой запуск.