在某个点移动名称中有一位或两位数字的文件
Move files having one or two digits in name at certain point
假设我有一个文件夹,里面装满了名称格式为 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.
中可用的解决方案
除非我误解了你的意思:
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
假设我有一个文件夹,里面装满了名称格式为 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.
除非我误解了你的意思:
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