如何递归解压缩和解压缩文件?

我有一个很大的文档,其中包含 zip 和 rar 以及 rar 文件,这些文件位于 linux 盒子上。

我本质上需要一个脚本或一个衬里,它将递归地搜索目录站点并解压缩并解压缩它找到的任何类型的 rar 或 zip。

2
2022-07-25 20:25:56
资源 分享
答案: 4

这是使用 shell 脚本的某人的选项。

Linux 似乎没有递归解压缩替代方案:(

2
2022-07-25 22:46:48
资源

我能想到的唯一方法是用定位循环几次,并执行一个手稿,在正确解包后删除数据。 它必须多次检查子目录,因此它并不完全可靠。 (顶部充满活力的预期文件名)

递归解包

#!/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 预计解包器在同一目录中
  • unrarunzip 需要安装
  • 如果它找不到目录站点,它将错误退出
  • 不要删除解包器中的类似消息,它们用于检查是否存在要解包的数据以终止循环
1
2022-07-25 22:46:48
资源

一个快速的单行,不检查当前是否已提取档案:

$ find . -name '*.rar' -execdir unrar e '{}' + && find . -name '*.zip' -execdir unzip -tq '{}' +
1
2022-07-25 22:46:48
资源

也许 dtrx () 会做,虽然我不确定它是否处理 rar 类型。

0
2022-07-25 22:35:33
资源