gpt4 book ai didi

linux - 如何在同一个文件夹中解压一堆相同的包?

转载 作者:IT王子 更新时间:2023-10-29 00:51:27 26 4
gpt4 key购买 nike

我在解压目录中的 .tar.gz 文件列表时遇到问题。

在我的目录中,

有很多 result.tar.gz ,它们是同名的,它们被重命名为...

result.tar.gz
result (1).tar.gz
result (2).tar.gz
result (3).tar.gz
result (4).tar.gz
....
....
....
....

我想用一个 linux 命令解压所有这些。所以我尝试使用

tar zxvf *

tar zxvf result*.tar.gz

都得到了这个错误

tar: result (3).tar.gz: Not found in archive
tar: result (4).tar.gz: Not found in archive
tar: result (5).tar.gz: Not found in archive
tar: result (6).tar.gz: Not found in archive

谁知道如何同时解压所有的包?

最佳答案

tar 一次只知道如何处理一个 .tar 文件:用 f 指定的文件。如果您在命令行上指定其他名称,它们将被解释为要从指定的 .tar 文件中提取的文件。

到目前为止,大多数答案都没有考虑不寻常的文件名,例如包含空格、换行符或其他特殊字符的文件名)。

正确答案是:

for file in *.tar.gz ; do
tar xzf "$file"
fi

另一个可接受的答案是使用 find

find . -maxdepth 1 -type f -name '*.tar.gz' -exec tar xzf {} \;`

为什么我不能...

  • 使用 ls *.tar.gz | ...

    因为 ls 会破坏文件名中的某些字符(即不安全)。如果你必须为此使用 ls,你应该小心使用 ls -1 然后注意你将换行符和仅换行符作为记录分隔符。这仍然不安全,但更安全。

  • 使用不带引号的 $file

    因为名称中包含空格的文件将以您意想不到的方式进行解释。示例:名为 monthly backup.tar.gz 的文件将被解释为 tar xzf monthly backup.tar.gz 并且您将收到错误消息,因为存档 monthly 不存在。

  • 使用echo | xargs tar ?

    因为 echo 会破坏文件名,特别是名称中带有空格的文件名。

在执行while read 循环时,您几乎总是希望使用read -r,这将防止输入中的反斜杠被解释为转义序列。如果您有一个名为 foo\bar 的文件,那么没有 -rread 将无法正确读取它。

编辑:

根据评论,这里有一种将 tarball 提取到子目录中的方法。

for file in *.tar.gz ; do
# strip any leading path information from the file name
name_only="${file##*/}"

# strip the extension .tar.gz
without_extension="${name_only%.tar.gz}"

# make a directory named after the tar file, minus extension
mkdir -p "$without_extension"

# extract the file into its own directory
tar xzf "$file" -C "$without_extension"
done

上面我解压到以 tarball 命名的目录中。但是,任何用于制作唯一目录名称的方案都足够了。例如,这是一个提取到按顺序编号的目录的版本:

let n=0
for file in *.tar.gz ; do
mkdir -p "$n";
tar xzf "$file" -C "$n"

let n=n+1
done

关于linux - 如何在同一个文件夹中解压一堆相同的包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6978350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com