在for循环中使用'tar'命令

时间:2016-08-06 05:48:27

标签: linux bash shell tar

我知道这是基本问题,但请帮助我。我使用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列出文件时,它并未显示所有文件。

1 个答案:

答案 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