假设我有一个文件夹,其中包含名称格式为foo<number1>.bar.o<number2>
的文件。 <number1>
可以包含1
,2
或3
位数字。
现在,如果由于某些奇怪的原因,我想只移动<number1>
由1
或2
位数组成的文件,而不是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中使用的解决方案。
答案 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