使用重命名命令批量重命名文件

时间:2019-06-22 13:49:58

标签: linux shell

我试图仅将数字保留在方括号和文件扩展名中。 所以下面的文件:

t=int(input().rstrip())

n=[]

for i in range(t):
    n.append(int(input().rstrip()))

inp=sorted(n)

f1=1
f2=2
sf=2 #sum of fibonacci
it=iter(inp)
value=next(it)
out=[None]*len(n)
maxi=max(inp)

while f2<=maxi:

    f1=f1+f2
    f2=f1+f2
    f1=f2-f1
    f2=f2-f1

    if f2>value:
        out[n.index(value)]=sf

        try:
            value=next(it)
        except StopIteration:
            pass

    if f2%2==0:
        sf=sf+f2


print(*out,sep='\n')

我想成为:

【004】ssd水电费.txt
【006】佛山市,地方cd2.txt
【022】风sf.pdf

或就像

004.txt
006.txt
022.pdf

我知道'rename's / old-exp / new-exp'命令和一点正则表达式,但是我找不到找到符合我期望的正则表达式的方法。

我尝试4.txt 6.txt 22.pdf 来替换中文字符,但是不起作用。

1 个答案:

答案 0 :(得分:0)

您要使用以下内容:

rename 'tr/A-Za-z0-9.//cd; s/^(\d+).*(\.[a-z]+)$/$1$2/' *

(您首先要使用-n来测试它是否符合您的要求。)

这会删除文件名中除A-Za-z0-9.以外的所有字符,然后仅提取扩展名和开头的数字。

Unicode匹配不起作用的原因是rename使用字节字符串,而不是Unicode字符串,因为并非所有Unix路径都保证是有效的Unicode。因此,除非您必须这样做,否则只过滤掉不需要的字节值比将它们转换为Unicode要容易得多。