如何使用 shell 脚本解压所有 .tar.gz?

发布于 2024-10-04 11:25:25 字数 275 浏览 5 评论 0原文

我试过这个:

DIR=/path/tar/*.gz

if [ "$(ls -A $DIR 2> /dev/null)" == "" ]; then
  echo "not gz"
else
  tar -zxvf /path/tar/*.gz -C /path/tar
fi

如果文件夹有一个 tar,它就可以工作。如果该文件夹有很多 tar,我会收到错误。

我该怎么做?

我有一个想法运行循环来解压,但我不知道如何解决这个问题

I tried this:

DIR=/path/tar/*.gz

if [ "$(ls -A $DIR 2> /dev/null)" == "" ]; then
  echo "not gz"
else
  tar -zxvf /path/tar/*.gz -C /path/tar
fi

If the folder has one tar, it works. If the folder has many tar, I get an error.

How can I do this?

I have an idea to run a loop to untar, but I don't know how to solve this problem

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

帥小哥 2024-10-11 11:25:25
for f in *.tar.gz
do
  tar zxvf "$f" -C /path/tar
done
for f in *.tar.gz
do
  tar zxvf "$f" -C /path/tar
done
厌倦 2024-10-11 11:25:25

我发现 find exec 语法非常有用:

find 。 -name '*.tar.gz' -exec tar -xzvf {} \;

{} 被找到的每个文件替换并执行该行。

I find the find exec syntax very useful:

find . -name '*.tar.gz' -exec tar -xzvf {} \;

{} gets replaced with each file found and the line is executed.

溺深海 2024-10-11 11:25:25
for a in /path/tar/*.gz
do
    tar -xzvf "$a" -C /path/tar
done

注释

  • 这假定以 .gz 结尾的文件是 gzip 压缩的 tar 文件。通常使用 .tgz.tar.gz表示这一点,但是如果不这样做,tar 将失败正确的。
  • 您可能会发现首先cd /path/tar更容易,然后您可以从untar命令中删除-C /path/tar,然后删除/path /tar/ 在循环中。
for a in /path/tar/*.gz
do
    tar -xzvf "$a" -C /path/tar
done

Notes

  • This presumes that files ending in .gz are gzipped tar files. Usually .tgz or .tar.gz is used to signify this, however tar will fail if something is not right.
  • You may find it easier to cd /path/tar first, then you can drop the -C /path/tar from the untar command, and the /path/tar/ in the loop.
何止钟意 2024-10-11 11:25:25

接受的答案对我有用,稍作修改

for f in *.tar.gz
do
  tar zxvf "$f" -C \name_of_destination_folder_inside_current_path
done

我必须将正斜杠更改为反斜杠,然后它对我有用。

The accepted answer worked for me with a slight modification

for f in *.tar.gz
do
  tar zxvf "$f" -C \name_of_destination_folder_inside_current_path
done

I had to change the forward slash to a backslash and then it worked for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文