Извлечение нескольких типов файлов, игнорируя ошибки

Системная информация:

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, он выгружает все в текущую папку и не использует чистые папки

Как я могу извлечь все в отдельные папки, не разбрасывая все в текущий каталог?

2
задан 18 October 2010 в 15:37

3 ответа

Небольшой сценарий оболочки может прийти на помощь.

#! /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

Отказ от ответственности: не проверено, , поэтому попробуйте с одним или два образца архива, прежде чем делать большой пробег.

0
ответ дан 18 October 2010 в 15:37

for i in *; do mkdir "$i.extracted"; (cd "$i.extracted" && 7z x "../$i") || echo "Error with $i"; done

0
ответ дан 18 October 2010 в 15:37

Я не знаю ни о каком прямом решении, но с небольшим циклом bash вы можете сделать это в терминале (если, как кажется, подсказывает ваш вопрос, 7zip может делать все, что вы хотите, кроме извлечения в папку на имя файла). Попробуйте (в каталоге с архивами):

for FILE in *.*; do DIR=${FILE%.*}; mkdir $DIR && 7z x -o$DIR $FILE ; done

${FILE%.*} извлекает имя файла без расширения.

0
ответ дан 18 October 2010 в 15:37

Другие вопросы по тегам:

Похожие вопросы: