Я хочу разархивировать ZIP-файлы из текстового списка, каждый в свою собственную папку и вывести ошибки в файл журнала.
Список выглядит следующим образом:
0001.zip
0002.zip
Я знаю, что могу использовать следующую команду, но я просто не знаю, как это сделать.
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
Спасибо.
Поскольку у вас уже есть команда извлечения 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
Если мы предположим, что у вас есть текстовый список 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-файл.
Поскольку у вас уже есть команда извлечения 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
Если мы предположим, что у вас есть текстовый список 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-файл.
Поскольку у вас уже есть команда извлечения 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
Если мы предположим, что у вас есть текстовый список 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-файл.
Поскольку у вас уже есть команда извлечения 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
Если мы предположим, что у вас есть текстовый список 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-файл.
Если мы предположим, что у вас есть текстовый список 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-файл.