Системная информация:
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 и & amp; .zip.
Я хочу извлечь все эти файлы, используя их имя папки в качестве первого каталога («Извлечь здесь»)
Если я использую файл-ролик, он останавливается при первой ошибке, там не появляется быть флагом «игнорировать ошибку» для файлового ролика.
Если я использую 7zip, он выгружает все в текущую папку и не использует чистые папки
Как я могу извлечь все в отдельные папки, не разбрасывая все в текущий каталог?
Небольшой сценарий оболочки может прийти на помощь.
#! /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
Отказ от ответственности: не проверено, , поэтому попробуйте с одним или два образца архива, прежде чем делать большой пробег.
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%.*}
извлекает имя файла без расширения.