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

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

Список выглядит следующим образом:

0001.zip 0002.zip

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

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

Спасибо.

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

9 ответов

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

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

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

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

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
ответ дан 18 July 2018 в 15:34

Если мы предположим, что у вас есть текстовый список 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
ответ дан 18 July 2018 в 15:34

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

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

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

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

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
ответ дан 24 July 2018 в 20:40
  • 1
    Спасибо @muru, я получаю сообщение об ошибке «unzip: не могу найти или открыть файл *». Каким должен быть формат списка? – yarone 4 April 2017 в 13:54
  • 2
    Список файлов по одному в строке. Если есть пустые строки, используйте параметр -r с xargs. – muru 4 April 2017 в 13:57
  • 3
    Я получаю сообщение об ошибке, что unzip не может найти или открыть файл, пожалуйста, сообщите. – yarone 4 April 2017 в 14:08
  • 4
    Измените свой вопрос, чтобы отобразить этот список файлов. – muru 4 April 2017 в 14:09
  • 5
    Вопрос был отредактирован, спасибо. – yarone 4 April 2017 в 17:12

Если мы предположим, что у вас есть текстовый список 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
ответ дан 24 July 2018 в 20:40
  • 1
    Вероятно, вы должны сделать cd -, чтобы вернуться в исходный каталог (или запустить cd ...; unzip в подоболочке. – muru 4 April 2017 в 13:07
  • 2
    Хороший момент, спасибо. – taifwa 4 April 2017 в 13:10
  • 3
    спасибо @taifwa, я получаю сообщение об ошибке при попытке запустить скрипт: .ZIP.or ../0001.zip или открыть ../0001.zip, пожалуйста, сообщите. – yarone 6 April 2017 в 17:04
  • 4
    проверьте, что файл zip существует на указанном пути. – taifwa 6 April 2017 в 17:06
  • 5
    Я запускаю его с пути файлов ZIP, я попытаюсь выяснить, что не так. – yarone 9 April 2017 в 15:54

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

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

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

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

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
ответ дан 31 July 2018 в 12:43
  • 1
    Спасибо @muru, я получаю сообщение об ошибке «unzip: не могу найти или открыть файл *». Каким должен быть формат списка? – yarone 4 April 2017 в 13:54
  • 2
    Список файлов по одному в строке. Если есть пустые строки, используйте параметр -r с xargs. – muru 4 April 2017 в 13:57
  • 3
    Я получаю сообщение об ошибке, что unzip не может найти или открыть файл, пожалуйста, сообщите. – yarone 4 April 2017 в 14:08
  • 4
    Измените свой вопрос, чтобы отобразить этот список файлов. – muru 4 April 2017 в 14:09
  • 5
    Вопрос был отредактирован, спасибо. – yarone 4 April 2017 в 17:12

Если мы предположим, что у вас есть текстовый список 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
ответ дан 31 July 2018 в 12:43
  • 1
    Вероятно, вы должны сделать cd -, чтобы вернуться в исходный каталог (или запустить cd ...; unzip в подоболочке. – muru 4 April 2017 в 13:07
  • 2
    Хороший момент, спасибо. – taifwa 4 April 2017 в 13:10
  • 3
    спасибо @taifwa, я получаю сообщение об ошибке при попытке запустить скрипт: .ZIP.or ../0001.zip или открыть ../0001.zip, пожалуйста, сообщите. – yarone 6 April 2017 в 17:04
  • 4
    проверьте, что файл zip существует на указанном пути. – taifwa 6 April 2017 в 17:06
  • 5
    Я запускаю его с пути файлов ZIP, я попытаюсь выяснить, что не так. – yarone 9 April 2017 в 15:54

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

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

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

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

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
ответ дан 31 July 2018 в 23:41
  • 1
    Спасибо @muru, я получаю сообщение об ошибке «unzip: не могу найти или открыть файл *». Каким должен быть формат списка? – yarone 4 April 2017 в 13:54
  • 2
    Список файлов по одному в строке. Если есть пустые строки, используйте параметр -r с xargs. – muru 4 April 2017 в 13:57
  • 3
    Я получаю сообщение об ошибке, что unzip не может найти или открыть файл, пожалуйста, сообщите. – yarone 4 April 2017 в 14:08
  • 4
    Измените свой вопрос, чтобы отобразить этот список файлов. – muru 4 April 2017 в 14:09
  • 5
    Вопрос был отредактирован, спасибо. – yarone 4 April 2017 в 17:12

Если мы предположим, что у вас есть текстовый список 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
ответ дан 31 July 2018 в 23:41
  • 1
    Вероятно, вы должны сделать cd -, чтобы вернуться в исходный каталог (или запустить cd ...; unzip в подоболочке. – muru 4 April 2017 в 13:07
  • 2
    Хороший момент, спасибо. – taifwa 4 April 2017 в 13:10
  • 3
    спасибо @taifwa, я получаю сообщение об ошибке при попытке запустить скрипт: .ZIP.or ../0001.zip или открыть ../0001.zip, пожалуйста, сообщите. – yarone 6 April 2017 в 17:04
  • 4
    проверьте, что файл zip существует на указанном пути. – taifwa 6 April 2017 в 17:06
  • 5
    Я запускаю его с пути файлов ZIP, я попытаюсь выяснить, что не так. – yarone 9 April 2017 в 15:54

Если мы предположим, что у вас есть текстовый список 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
ответ дан 9 August 2018 в 03:09

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

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