我有一个包含大约 800 个 .tgz 档案的目录,每个档案包含大约 10 个文件。实际上,我想将每个存档转换为同名目录。是否有一个简单的单行命令来执行此操作,或者我应该编写一个脚本?
5 回答
自 GNU tar 1.28 以来的更新:使用--one-top-level
,请参阅https://www.gnu.org/software/tar/manual/tar.html#index-one_002dtop_002dlevel_002c-summary
旧版本需要为此编写脚本。您可以使用 tar -C 选项来指定要放置解压的目录。
下面的脚本假定目录不存在并且必须创建。如果目录确实存在,则脚本仍然可以工作 - mkdir 只会失败。
tar -xvzf archive.tar.gx -C archive_dir
例如
for a in *.tar.gz
do
a_dir=${a%.tar.gz}
mkdir --parents $a_dir
tar -xvzf $a -C $a_dir
done
如果GNU tar
考虑到足够现代,那么这应该是这里的最佳答案:https ://unix.stackexchange.com/a/478341/34069
为简洁起见,这是摘录:
tar -xvf bash.html_node.tar.gz --one-top-level
它将存档提取到以存档文件名命名的新目录中。
创建一个要像这样提取的mkdir archive
文件夹,并在提取时使用 -C 传递文件夹名称,
tar -xvf archive.zip -C archive
将文件从一个目录提取到第二个目录,同时将文件名保留在第二个目录中,即没有完整的文件路径和文件扩展名
%sh
for file in /mnt/dir1/*.tar.gz;
do
y=${file##*/};
z=${y%%.*};
mkdir -p /mnt/dir2/$z && tar -xzvf $file -C /mnt/dir2/$z;
done
好吧,如果你运行$ tar -zxf some-archive.tar.gz -C .
,(注意最后的点)一个名为的新目录some-archive/
将在你当前所在的目录中创建。
也许这就是你的问题的意思?这是我通常想要的,所以它也可能对你有用。