查找扩展名仅包含数字的文件

时间:2015-05-04 01:40:06

标签: regex bash grep find ls

我怎么能找到以“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;..."

做这项工作,即使有循环?

感谢。

5 个答案:

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