我如何找到文件以" log"结尾。[一个或多个数字的数字]?
我在日志目录中有一个文件列表:
/user/log/log.1
/user/log/log.222
/user/log/log.201505
/user/log/log.2014.gz
我想gzip仅以数字结尾的文件,然后将它们移至bak目录:
/user/bak/log.1.gz
/user/bak/log.222.gz
/user/bak/log.201505.gz
是否有任何方法可以包含模式(log。[0-9]*),并使用 find / ls /同时排除数字以外的扩展名。 GREP 等?
另外,我的情况也要求我在其他服务器上执行上述日志的备份,我是否只使用
ssh $SERVER "command1;command2;..."
即使有循环?
也要完成这项工作谢谢。
您可以将-regex
标志用于find
。您可能还需要-E
才能将其解释为现代的扩展正则正则正则罚款。这样的东西:
find -E /user/log -regex '.*/log.[0-9]+'
使用bash扩展模式:
shopt -s extglob
numeric_extensions=( *.+([0-9]) ) # use an array for storage
printf "%sn" "${numeric_extensions[@]}" # print the array contents
如果您不介意循环,这是一个主动性:
#!/bin/bash
for file in /user/log/*; do
if [[ -f $file ]]; then
ext="${file##*.}"
if [[ $ext =~ [0-9]$ ]]; then
#only files with numeric extention are available here
#put your gzip or whateve code here
fi
fi
done
这是您可以使用的单线。我已经在本地测试了执行。
find /user/log/ -type f -name "log.*[0-9]" -exec bash -c 'gzip "{}" && mv "{}.gz" "/user/bak/"' ;
您可能会使用以下SSH调用此:
ssh user@$SERVER 'find /user/log/ -type f -name "log.*[0-9]" -exec bash -c 'gzip "{}" && mv "{}.gz" "/user/bak/"' ;'
我想出了类似的正则言论:
^.+/log.[0-9]+