**方法一** find命令先查找符合的文件,for循环结合mv 和cp命令进行对文件处理
#!/bin/bash d=/root/test/ #指定你须要压缩的文件目录 find $d -type f -name "*.txt" >/tmp/tar.txt #指定一个文本用于循环 #找到符合的文件写入到 tar.txt文本里面 for i in `cat /tmp/tar.txt` #遍历文本 do mv $i $i.bak done date=`date +%y%m%d%H%M%S` #建立一个目录文件用date命令防止重复 mkdir -p /tmp/tar_$date for j in `cat /tmp/tar.txt` do cp $j.bak /tmp/tar_$date done cd /tmp/ #进入到想要保存的目录进行保存,这里是/tmp目录保存 tar -czf 123.tar.gz tar_$d/ #**注1 ** tar -tvf 查看压缩文件 ,tar-xzvf 解压 -C指定解压目录, #tar命令不容许绝对路径,因此要进入到目录下进行压缩
for k in `cat /tmp/tar.txt` do mv $k.bak $k #for循环还原压缩文本 done
注1:若是加了 /tmp/tar_$d/ 用tar -tf命令显示的压缩包错误信息为: tmp/tar_201017235924/
若是必定要绝对路径 需加上 -P选项,解压时也须要加上 -zxvPfbash
**方法二** find命令先查找符合的文件,xargs对查找的文件进行处理
#!/bin/bash d=/root/test/ #指定你须要压缩的文件目录 find $d -type f -name "*.txt">/tmp/tar.txt #指定一个文本用于循环 for i in `cat /tmp/tar.txt` do mv $i $i.bak done for j in `cat /tmp/tar.txt ` do echo $j.bak done > /tmp/tar.bak #建立两个内容文件,一个用于.txt复原,一个用于.bak压缩 cd $d tar -czf /tmp/123.tar.gz `cat /tmp/tar.bak|awk -F "/" '{print $4}'| xargs` #tar命令必须用相对路径 否则会报错 若是必定要用绝对路径则须要加上-zcPf for k in `cat /tmp/tar.txt` do mv $k.bak $k #for循环还原压缩文本 done
总结:方法二跟方法一差别在于方法二省略了建立目录的过程,可是须要建立两个文本进行替换ide