将文件夹中的所有文件重命名为连续数字

我想重命名文件夹中的所有文件,以便有连续的数字。 例如:

1.png 2.png 3.png etc 

我知道有重命名命令,我知道这里有类似问题的DOZENS ,但我找不到方法。

注意 :建议的重复项不包含特定于我的案例的解决方案。 请停止将此标记为重复,因为建议的重复不会回答我的问题

假设您想在排序文件时遵循shell globbing顺序,您可以执行以下操作:

 #!/bin/bash counter=0 for file in *; do [[ -f $file ]] && echo mv -i "$file" $((counter+1)).png && ((counter++)) done 

这里循环遍历当前目录中的所有文件并按顺序重命名,如果只想处理.png文件,请使用for file in *.pngcounter变量将跟踪增量。

这是一个干运行,删除echo ,让实际的重命名动作发生。

例:

 $ counter=0; for file in *; do [[ -f $file ]] && echo mv -i "$file" $((counter+1)).png && ((counter++)); done mv -i file.txt 1.png mv -i foo.sh 2.png mv -i bar.txt 3.png 

这是一个小python脚本,可以做你要求的

基本用法:

 python rename_files.py Pictures/ 

在重命名每个文件之前,它会将输出打印到stdout

此版本推送索引,直到发现没有采用具有此类索引的文件名。 尽管在脚本连续迭代时文件名可能以不同的索引开始,但文件本身保持不变。

 import os import sys top_dir = os.path.abspath(sys.argv[1]) files = os.listdir( top_dir ) for index,item in enumerate(files): if os.path.isdir( os.path.join(top_dir,item) ): files.pop(index) files.sort() duplicates = [] last_index = None for index,item in enumerate(files): last_index = index extension = "" if '.' in item: extension = '.' + item.split('.')[-1] old_file = os.path.join(top_dir,item) new_file = os.path.join(top_dir,str(index) + extension ) while os.path.isfile(new_file): last_index += 1 new_file = os.path.join(top_dir,str(last_index) + extension ) print( old_file + ' renamed to ' + new_file ) os.rename(old_file,new_file) 

替代版本,通过将时间戳附加到每个文件名,然后枚举它们来解决重复文件名的问题。 随着文件数量的增加,此解决方案可能需要更长的时间,但对于范围为数百的目录,这不会花费很长时间

 import os import sys import time top_dir = os.path.abspath(sys.argv[1]) files = os.listdir( top_dir ) for index,item in enumerate(files): if os.path.isdir( os.path.join(top_dir,item) ): files.pop(index) files.sort() timestamp = str(int(time.time())) for item in files: os.rename( os.path.join(top_dir,item) , os.path.join(top_dir, timestamp + item) ) files2 = os.listdir( top_dir ) for index,item in enumerate(files2): if os.path.isdir( os.path.join(top_dir,item) ): files2.pop(index) for index,item in enumerate( files2 ): last_index = index extension = "" if '.' in item: extension = '.' + item.split('.')[-1] old_file = os.path.join(top_dir,item) new_file = os.path.join(top_dir,str(index) + extension ) while os.path.isfile(new_file): last_index += 1 new_file = os.path.join(top_dir,str(last_index) + extension ) print( old_file + ' renamed to ' + new_file ) os.rename(old_file,new_file)