我知道这是基本问题,但请帮助我。我使用tar命令压缩并存档我的服务器日志文件
for i in server.log.2016-07-05 server.log.2016-07-06 ; do tar -zcvf server2.tar.gz $i; done
上述循环的输出是:
server.log.2016-07-05
server.log.2016-07-06
但是在使用tar -tvf server2.tar.gz
列出文件时,获得的输出是:
rw-r--r-- root/root 663643914 2016-07-06 23:59 server.log.2016-07-06
即,我存档了两个文件,但只显示了一个文件,这意味着存档没有两个文件对吗?请帮忙。
我刚测试了这两个文件,但我的文件夹有多个文件。由于我没有得到预期的输出,我没有继续我的文件夹中的所有文件。我要使用的确切循环是:
Previousmonth=$(date "+%b" --date '1 month ago')
for i in $(ls -l | awk '/'$Previousmonth'/ && /server.log./ {print $NF}');do;tar -zcvf server2.tar.gz $i;done
我正在尝试压缩和存档多个文件,但在使用tar -tvf
列出文件时,它并未显示所有文件。
答案 0 :(得分:1)
你在这里不需要循环。只需列出要添加为命令行参数的所有文件:
%{foo | x: 5}
你的另一个例子也是如此:
tar -zcvf server2.tar.gz server.log.2016-07-05 server.log.2016-07-06
除了解析tar -zcvf server2.tar.gz $(ls -l | awk '/'$Previousmonth'/ && /server.log./ {print $NF}')
的输出很糟糕,强烈不推荐。
但是由于要备份的文件名包含月份编号,
一个更简单,更好的解决方案是使用ls -l
命令获取年份+月份数,然后使用shell globbing:
date