Linux 目录下压缩部分文件
背景Linux下某个目录下有小文件好几万,命名规则按日期每小时N个,想要过滤出指定日期的文件并添加到压缩文件中,记录下脚本化的过程如下。正则过滤存在的问题首先,直接进入该目录,由于文件数过多,ls打印半天出不了结果。其次,ls | grep命令筛选直接报错:解决办法网络搜索到xargs命令可以批量输出,调整思路如下:1、批量输出目标目录下的文件名称到某个文件。2、逐行读取该文件内...
·
背景
Linux 下某个目录下有小文件好几万,命名规则按日期每小时 N 个,想要过滤出指定日期的文件并添加到压缩文件中,记录下脚本化的过程如下。
正则过滤存在的问题
首先,直接进入该目录,由于文件数过多,ls 打印半天出不了结果。
其次,ls | grep命令筛选直接报错:
解决办法
网络搜索到 xargs 命令可以批量输出,调整思路如下:
1、批量输出目标目录下的文件名称到某个文件。
2、逐行读取该文件内容,并匹配指定正则。
3、将匹配正则的文件名称输出到中间文件。
4、cat 该文件内容作为 tar 命令的参数,从而导出符合条件的文件到压缩文件
具体 shell 脚本为:
echo 'start.'
FILENAME=/home/201902.log
count=0
#remove last file
rm -f /home/test02.log
rm -f /home/201902.log
cd /opt/logdata/
ls | xargs -n 9 > /home/201902.log
# while read file line
while read clname2
do
if [[ "$clname2" =~ data_._201902* ]]; then
echo $clname2 >> /home/test02.log
count=$(($count+1))
fi
done<$FILENAME
echo $count
#zip
rm -f 201902.tar.gz
cat /home/test02.log | xargs tar -czvf 201902.tar.gz
echo 'finish'
执行上述脚本可完成 2 月份日志数据的导出。
启示录
简单脚本,涉及到几个知识点:
- 统计符合条件的文件总数,shell 对变量自增的语法。
- xargs 的应用。
- shell 循环读取文件的语法。
- 正则判断语法
更多推荐
已为社区贡献1条内容
所有评论(0)