Извинете за може би елементарния въпрос, но не мога да се справя с един проблем. ОС е Fedora 23. Имам една директория с много поддиректории в които има около 100 хиляди файла .tif или .pdf.
Как да преименувам всички файлове във всички директории, така че във всяка директория файловете да започват от 00001, после 00002 и тн.
Благодаря предварително!!!
Здравей!
Копирай пълния път до директорията, в която са ти файловете и го сложи на мястото на './test/'.
Не забравяй наклонената черта накрая.
Запиши го като например rename.py и или можеш да го направиш изпълним с chmode +x rename.py с администраторки права за командата и после да го стартираш от терминала, или можеш да го стартираш с python rename.py.
Трябва да имаш права за запис в директорията в която ще ти е скрипта, защот в същата директория ще ти запише и нещо като логфайл.
Дано да ти свърши работа. При теста работи.
Ако не си намерил друг начин. Гледам, че темата е отпреди 4 дена.
Май ще мога и скрипта да прикача
Малка поправка. Нов ред за всеки запис във логфайла, да е по-четимо. Новото име е renamer.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import os.path
from datetime import datetime
ROOT_DIR = "./test/"
def file_rename(path,):
counter = 0
with open('rename.log','w') as log_file:
for root, dirs, files in os.walk(path):
print(root + '\n')
log_file.write(root + '\n')
if files:
num_files = len(str(len(files)))
for n, f in enumerate(files, 1):
old_name = os.path.join(root, f)
new_name = "{:0>{}d}".format(n, num_files) + \
os.path.splitext(f)[1]
file_full_path = os.path.join(root, new_name)
result = ''
os.rename(old_name, file_full_path)
counter += 1
result = "\tDone: {} ---> {}".format(f, new_name)
log_file.write(result + '\n')
print(result)
return counter
def main():
start = datetime.now()
files = file_rename(ROOT_DIR)
end = datetime.now()
print("\n\nAll done! " + str(files) + " files renamed in " + str(end - start) + " (h:min:sec).")
print("Logfile 'rename.log' saved in ./!")
if __name__ == '__main__':
main()