Как рекурсивно разархивировать и разархивировать файлы?

У меня есть существенные данные, которые содержат zip-файлы и rar-файлы с zip-файлами, а также rar-документы, расположенные в Linux-окне.

В первую очередь мне нужен сценарий или один из них, который будет рекурсивно искать в каталогах, а также распаковывать и разархивировать любой тип rar или zip, который он найдет.

2
2022-07-25 17:25:56
Источник Поделиться
Ответы: 4

Вот чье-то решение этого с помощью сценария оболочки. хх_ссылка_0

Казалось бы, в Linux нет альтернативы рекурсивной разархивации :(

2
2022-07-25 19:46:48
Источник

Единственный способ, который я могу придумать, - это многократно зацикливаться с поиском и выполнением сценария, который избавляется от документов после того, как они были правильно распакованы. Ему нужно будет несколько раз просмотреть подкаталоги, поэтому он не совсем эффективен. (ожидаемые имена файлов выделены впереди)

recursive_unpack

#!/bin/bash
if [ -d "$1" ]; then
   STARTDIR="$1"
else
   echo "starting dir not found: $1"
   exit
fi


COUNTER=1
while [ $COUNTER -gt 0 ]; do
   COUNTER=`find "$STARTDIR" -type f \( -iname '*.zip' -o -iname '*.rar' \) -exec ./unpacker \{\} \; | wc -l`
done

распаковщик

#!/bin/bash
BASENAME=`basename "$1"`
BASEDIR=`dirname "$1"`

cd "$BASEDIR"
EXT=`echo "$BASENAME" | awk -F . '{print $NF}'`

if [ "$EXT" = "zip" ]; then
  unzip -qq "$BASENAME"
  if [ $? -eq 0 ]; then
     echo "zip unpacked: $1"
     rm "$BASENAME"
  fi
fi

if [ "$EXT" = "rar" ]; then
  unrar e -y -c- -inul "$BASENAME"
  if [ $? -eq 0 ]; then
     echo "rar unpacked: $1"
     rm "$BASENAME"
  fi
fi

делать

chmod u+x recursive_unpack
chmod u+x unpacker

назовите это с помощью ./recursive_unpack "/my/directory/containing/my/files"

  • recursive_unpack ожидает распаковщика в том же каталоге сайта
  • unrar, а также unzip должны быть смонтированы
  • если он не может найти сайт каталога, он выйдет с ошибкой
  • не удаляйте напоминающие сообщения в распаковщике, они используются для проверки наличия документов, которые нужно выгрузить, чтобы завершить цикл
1
2022-07-25 19:46:48
Источник

Быстрый - лайнер, не проверяет, был ли уже извлечен архив:

$ find . -name '*.rar' -execdir unrar e '{}' + && find . -name '*.zip' -execdir unzip -tq '{}' +
1
2022-07-25 19:46:48
Источник

Возможно, подойдет dtrx (), хотя я не уверен, что он поддерживает формат rar.

0
2022-07-25 19:35:33
Источник

Смежные вопросы