我怎么能找到以“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
有没有办法包含模式(日志。[0-9] *)并使用查找 / ls /同时排除数字以外的扩展程序 grep 等?
另外,我的情况也要求我在其他服务器上执行上面的日志备份,我只需使用
ssh $SERVER "command1;command2;..."
做这项工作,即使有循环?
感谢。
答案 0 :(得分:1)
您可以使用-regex
标记find
。您可能还需要-E
将正则表达式解释为现代扩展正则表达式。像这样:
find -E /user/log -regex '.*/log\.[0-9]+'
答案 1 :(得分:1)
使用bash扩展模式:
shopt -s extglob
numeric_extensions=( *.+([0-9]) ) # use an array for storage
printf "%s\n" "${numeric_extensions[@]}" # print the array contents
答案 2 :(得分:0)
如果你不介意循环,这是一个倡议:
#!/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
答案 3 :(得分:0)
这是您可以使用的单行程。我已在本地测试了执行情况。
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/"' \;'
答案 4 :(得分:-1)
我想出了一个类似的正则表达式:
^.+\/log\.[0-9]+