Linux 命名tar存档与源文件相同
简单地说,我想从一个文件创建一个存档并保留文件名Linux 命名tar存档与源文件相同,linux,tar,Linux,Tar,简单地说,我想从一个文件创建一个存档并保留文件名 File = host1.log Tar = Archive_date_host1.tar.gz 我是这样使用它的: find /var/log/TESTIN/ -daystart -mtime 7 -type f | xargs tar -czPf /var/log/TESTOUT/ARCHIVE_$(date +%F)_FILENAMEHERE.tar.gz “归档”和日期部分我可以做,但有没有办法抓取文件名并使用它?我在谷歌上搜索了很
File = host1.log
Tar = Archive_date_host1.tar.gz
我是这样使用它的:
find /var/log/TESTIN/ -daystart -mtime 7 -type f | xargs tar -czPf /var/log/TESTOUT/ARCHIVE_$(date +%F)_FILENAMEHERE.tar.gz
“归档”和日期部分我可以做,但有没有办法抓取文件名并使用它?我在谷歌上搜索了很多东西,但似乎什么也找不到。我认为只要
查找就足够了。例如,下面的命令将使用您想要的命名方案找到的每个文件创建一个.tar.gz
存档。注意,{}
被找到的文件名替换
find * -type f -exec tar -czf ARCHIVE_$(date +%F)_{}.tar.gz {} \;
看起来您希望使用每个文件的名称作为输出文件的变量部分,即删除名称的目录部分和.log
后缀。试试这个:
find /var/log/TESTIN/ -daystart -mtime 7 -type f | \
xargs -I {} sh -c 'tar -czPf /var/log/TESTOUT/ARCHIVE_$(date +%F)_$(basename {} .log).tar.gz {}'
这里的关键是使用-exec
,它允许您访问查找
找到的每一件东西。这非常有效。只是一个简单的后续问题。我还没有用过xargs,所以我还在学习。sh-c的具体功能是什么?sh-c命令将字符串作为参数,并将其作为shell命令运行,执行所有常规操作,例如命令替换($(…)
)。xargs可以运行任何单个命令,但它不一定要使用shell来运行,而尝试嵌套命令—要求xargs运行basename{}
,并使用其输出来构成tar
命令的一部分—仅使用xargs可能会有点混乱;让一个外壳来做这件事比较容易。