Извлеките несколько zip-файлов из текстового списка в их собственные папки с журналом ошибок

Я хочу разархивировать zip-файлы из текстового списка, каждого в его собственную папку и произвести ошибки в файл журнала.

Список похож на это:

0001.zip
0002.zip

Я знаю, что могу использовать следующую команду, но я просто не знаю, как выполнить вышеупомянутое.

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Спасибо.

4
задан 4 April 2017 в 04:22

2 ответа

Так как у Вас уже есть команда sh -c 'unzip -d "${1%.*}" "$1"' извлечения, можно использовать xargs для преобразования входных файлов в аргументы:

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _

Эти {} не нужно, так как xargs по умолчанию добавляет вход к списку аргументов. Эти -L1 заставляет его использовать одну строку входа как аргумент.

Затем просто перенаправляют вывод в файл:

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _ &> zip.log

Или просто ошибки:

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _ 2> zip.log
7
ответ дан 23 November 2019 в 11:39

Если мы предполагаем, что у Вас есть текстовый список zip-файлов как:

zipfile1.zip
another_archive.zip
...

затем можно сделать

cat ziplist.txt | while read zipfile; do
    zipdir="$(basename "$zipfile").d"

    (
        mkdir "$zipdir"
        cd "$zipdir"
        echo "Extracting $PWD/../$zipfile"
        unzip "../$zipfile" 2>&1 > "../$zipfile.log"
    )
done

, Это создаст каталог, разархивирует zip-файл в него при выписывании всего к файлу журнала в том же каталоге как сам zip-файл.

6
ответ дан 23 November 2019 в 11:39

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

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