在某个点移动名称中有一位或两位数字的文件

Move files having one or two digits in name at certain point

假设我有一个文件夹,里面装满了名称格式为 foo<number1>.bar.o<number2> 的文件。 <number1> 可以包含 123 个数字。

现在,如果出于某种奇怪的原因,我只想移动 <number1>12 数字组成的文件,而不是 3 ,我会写一个 python 脚本:

#!/bin/python
import glob, shutil, re
for f in glob.glob("*.bar.o*"):
    print f
    numbers = map(int, re.findall('\d+', f))
    print numbers
    if numbers[0] < 100:
        shutil.move(f, "dir/" + f)

现在的问题是:如果用更少的代码,例如一行(最多 80 个字符),如何做到这一点?

更喜欢在 bash shell.

中可用的解决方案

除非我误解了你的意思:

mv foo[0-9][0-9].bar* /wherever/you/like

会抓到2位数字

你可以做的任何一个:

 mv $(ls |egrep "foo[0-9]{1,2}.bar") /wherever/you/like

匹配foo<number1>.bar.o<number2>

for filename in *.bar.o*; do

    # 1. with a shell regex
    [[ $filename =~ ^foo[[:digit:]]{1,2}\.bar\.o[[:digit:]]+$ ]] && echo $filename

    # 2. with expanded globbing: shopt -s extglob
    [[ $filename == foo[[:digit:]]?([[:digit:]]).bar.o+([[:digit:]]) ]] && echo $filename

done