我不想重命名(或处理)目录中的文件(具有特定扩展名)。 文件名可以是包含订购号的任何内容,例如
1.aaa.txt
aa 1.txt
aa01bb.txt
78aa1bbb.txt
78aa2bbb.txt
使用或不使用前导零和新文件名进行编号。
所以我有:
NUM=0; for f in *.txt; do NUM=`expr $NUM + 1`; mv "$f" "yyy_$NUM.txt"; done
如何使循环也理解文件顺序,文件编号不带前导零1,2..10,11..etc。?
感谢。
答案 0 :(得分:1)
以下Python代码应该执行订购:
import re
from glob import glob
files = sorted([ file[:-4] for file in glob('*.txt') ])
chunked = []
for i, file in enumerate(files):
chunks = re.split('(\d+)', file)
for j, chunk in enumerate(chunks):
if chunk.isdigit():
chunks[j] = int(chunk)
chunked.append((chunks, i))
for chunk, i in sorted(chunked):
print(files[i])
这是一个看起来像这样的目录:
$ ls
01aa.txt 21a.txt aa01bb.txt aa10bb.txt
21aa.txt 2aa.txt aa023bb.txt aa1bb.txt
输出:
01aa.txt
2aa.txt
21a.txt
21aa.txt
aa01bb.txt
aa1bb.txt
aa10bb.txt
aa023bb.txt
这与简单sort
的输出不同。
$ ls | sort
01aa.txt
21aa.txt
21a.txt
2aa.txt
aa01bb.txt
aa023bb.txt
aa10bb.txt
aa1bb.txt