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

时间:2015-01-08 15:29:56

标签: python regex bash mv

假设我有一个文件夹,其中包含名称格式为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中使用的解决方案。

2 个答案:

答案 0 :(得分:1)

除非我误解你的意思:

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

将捕获2位数字

你可以这样做:

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

答案 1 :(得分:0)

匹配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