在 Linux 终端中:我在一个文件夹中,假设/home/user/origlocation/
我需要转到一个文件夹../source/
并查找所有名为的文件test*.txt
。然后我需要将这些文件压缩(tar.gz)到一个位置/home/user/target/
,最重要的是没有 tar 文件中的目录结构(我只需要立即提取的 tar 结果中的文件名)。请帮忙。
答案1
这应该有效
cd ../source && tar -cvf foo.tar test*.txt;
mv ./foo.tar /home/user/target/ && cd ../origlocation
答案2
假设你有一个较新的tar
,你可以这样做:
find ../source -name 'test*.txt' | tar --transform='s,.*/,,' -cvzf /home/user/target/test-txt.tar.gz -T-
它的工作原理是通过使用find
来生成目标目录及以下目录下的文件列表。tar
然后从管道中读取此列表stdin
(使用“-T-”),然后创建所需的存档(包括使用压缩gzip
),使用表达式转换输出文件路径sed
,从而剥离所有前导目录组件。
如果实际上所有文件都在一个目录中,那就更简单了:
(cd ../source; tar -cvzf /home/user/target/test-txt.tar.gz test*.txt)
通过使用子 shell 将您移动到目标目录,但仍将 tar 存档写入所需的最终位置。不包括任何目录组件,因为您使用简单的 shell glob 来选择工作目录中的文件。