linux - 从 linux 中的文件夹解压子文件夹

标签 linux directory tar

我有一个目录 /Landsat_Data/,其中包含子目录(Landsat_Data/Site1Landsat_Data/Site2 等)。每个子目录包含 .tar.gz 文件(例如 /Landsat_Data/Site2/LE70930862008092-SC20160107074735.tar.gz 等)和每个 .tar.gz 文件包含像这样的 tif 或 xml 文件L

-rw-r--r-- espa/ie  29952 2016-01-07 14:57 LT50930861991021ASA00_sr_snow_qa.tif 

我想做的是将每个 tar 文件解压到它自己的子目录中(例如 Landsat_Data/Site2/LE70930862008092-SC20160107074735/)。

到目前为止,我在 Landsat_Data 目录中使用此命令行:

find . -type f -name "*.tar.gz" -execdir tar -xvzf {} \;

但是,此命令将所有的 tif 和 xml 文件提取到每个子目录(例如 Landsat_Data/Site2),而我只想解压 LE70930862008092-SC20160107074735.tar.gz 有一个名为 LE70930862008092-SC20160107074735 的子目录,其中包含所有的 tif 和 xml 文件。知道如何实现我想要的吗?

最佳答案

在运行 tar 之前,您可能会解析文件名并 cd 到目录中。您可以像这样将一个简单的 shell 脚本放入 /folder 中:

~/folder$ cat extract-in-dir.sh 
#!/bin/bash
DIRECTORY="${1%/*}"
TARFILE="${1##*/}"

cd $DIRECTORY
tar -xf $TARFILE

然后 chmod +x ./extract-in-dir.sh 并像这样运行它:

找到 . -type f -name\*tar -exec ./extract-in-dir.sh {}\;

关于linux - 从 linux 中的文件夹解压子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39998830/

相关文章:

java - 在 Android 设备上更改 scaling_governor

linux - 我的 linux bash 脚本不会遍历所有文件

github - Windows Github 推送新文件夹的问题

c# - 如何使用 C# 在命令提示符下更改目录位置?

linux - 每次通过 ftp 上传新文件时都使用相同的名称解压文件

c++ - 当 "cmake"到 amazon linux 上的 libigl 时找不到 libigl

python - 在进程之间通信时,队列比管道有什么优势?

permissions - Inno Setup-如何设置文件夹的完全权限,而不仅仅是其内容

tar - 为什么 tarball 被称为 tarball 而不仅仅是 tar?

python - 我想提取一个 .tgz 文件并提取任何包含 .tgz 和 .tar 文件的子目录