命名 tar 存档与源文件相同

Naming tar archive the same as source file

很简单,我想从文件创建存档并保留文件名。

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

"archive" 和日期部分我可以做,但是有没有办法获取文件名并使用它?我用谷歌搜索了很多,似乎找不到任何东西。

我认为 find 应该足够了。例如,以下命令使用您想要的命名方案从找到的每个文件中创建一个 .tar.gz 存档。请注意,{} 被找到的文件名替换,

find * -type f -exec tar -czf ARCHIVE_$(date +%F)_{}.tar.gz {} \;

貌似要将每个文件的basename作为输出文件的可变部分,即去掉名称的目录部分和.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 {}'