提取多种文件类型并忽略错误

提取多种文件类型并忽略错误

系统信息:

aggitan@moneque:~$ uname -a
Linux moneque 2.6.32-25-generic #44-Ubuntu SMP Fri Sep 17 20:05:27 UTC 2010 x86_64 GNU/Linux

aggitan@moneque:~$ 7z

7-Zip 9.04 beta  Copyright (c) 1999-2009 Igor Pavlov  2009-05-30
p7zip Version 9.04 (locale=en_US.utf8,Utf16=on,HugeFiles=on,2 CPUs)

我有一个文件夹,里面有 68 个档案,包括 .rar、.ace 和 .zip。

我想使用它们的文件夹名称作为第一个目录来提取所有这些文件(“在此处提取”)

如果我使用文件滚筒,它会在第一个错误时停止,文件滚筒似乎没有“忽略错误”标志。

如果我使用 7zip,它会将所有内容转储到当前文件夹中,并且不会使用干净的文件夹

如何才能将所有内容提取到单独的文件夹中,而不会将所有内容溢出到当前目录中?

答案1

for i in *; do mkdir "$i.extracted"; (cd "$i.extracted" && 7z x "../$i") || echo "Error with $i"; done

答案2

我不知道有任何直接的解决方案,但您可以在终端中使用一个小的 bash 循环来完成它(如果如您的问题所暗示的那样,7zip 能够执行您想要的所有操作,除了根据文件名提取到文件夹中)。尝试(在包含存档的目录中):

for FILE in *.*; do DIR=${FILE%.*}; mkdir $DIR && 7z x -o$DIR $FILE ; done

提取${FILE%.*}不带扩展名的文件名。

答案3

一点 shell 脚本也许能帮上忙。

#! /bin/bash

for archive in "$@"; do (
    archive_dir="$(cd $(dirname "$archive"); pwd -P)"
    archive_name="$(basename "$archive")"
    # make a directory by appending `.d` to the archive file name
    name="${archive_name}.d"
    mkdir -p "$name"
    cd "$name"
    # extract contents with full path, 
    # replace 'x' with 'e' to extract into $name directory
    7z x "${archive_dir}/${archive_name}"
); done

把上面的内容粘贴到一个文件中extract.sh(在您想要提取文件的目录中),然后使其可执行:

chmod +x ./extract.sh

该脚本通过附加文件名来为命令行中给出的每个档案创建一个目录.d(例如,对于档案, stuff.zip它将创建目录stuff.zip.d),然后将档案中的文件提取到其中。

您可以在这样的终端中调用它(使用通配符一次提取多个档案):

./extract.sh stuff.zip stuff2.rar

免责声明:未经测试,因此,在进行大规模运行之前,请先使用一两个样本档案进行尝试。

相关内容