在 Linux 终端中查找文件夹中的文件,将其压缩到没有目录结构的目标位置

在 Linux 终端中查找文件夹中的文件,将其压缩到没有目录结构的目标位置

在 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 来选择工作目录中的文件。

相关内容