Мне нужно переименовать файлы на SD-карте, чтобы иметь возможность скопировать содержимое нескольких подпапок на мой HDD. Сначала мне нужно найти их по их расширению .MOD (я могу сделать это с помощью find ./path/*.MOD2, так как они находятся в разных каталогах).
Мне нужно переименовать их, потому что у всех их есть имена, такие как MOV001.MOD, MOV002.MOD, в другом каталоге находятся другие видеоролики, но аналогично названы. Это было создано моей камерой. После переименования я мог бы скопировать их по одной команде на мой жесткий диск.
Из-за их фактических имен, когда я использую cp ./path/*.MOD new-path, результатом будет то, что я перезаписываю файлы с одинаковым именем.
Как я могу это решить?
Вы можете скопировать их из рекурсивного каталога (включая все подкаталоги), найти расширение и переименовать их в один шаг со сценарием ниже.
Взятый из сценариев, которые я использую, чтобы не перезаписывать файлы при копировании из рекурсивного каталога:
#!/usr/bin/env python3
import os
import shutil
import sys
dr = sys.argv[1]
new_dir = sys.argv[2]
for root, dirs, files in os.walk(dr):
for name in files:
if name.lower().endswith(".mod"): # for your extension
n = 1; name_orig = name
while os.path.exists(new_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig
n = n+1
newfile = new_dir+"/"+name
shutil.copy(root+"/"+name_orig, newfile)
Скопируйте сценарий в пустой файл, сохраните его как nodupes.py, запустите его с исходными данными (source-) и выведите каталог в качестве аргументов:
python3 /path/to/nodupes.py /path/to/sourcedir /path/to/outputdir
Он переименует аналогичные именованные файлы, такие как:
Конечно, вместо duplicate_, сценарий можно изменить, чтобы использовать что-либо пронумерованное (или просто числа).
Обобщенная версия not , которая ищет только одно расширение, будет:
#!/usr/bin/env python3
import os
import shutil
import sys
dr = sys.argv[1]
new_dir = sys.argv[2]
for root, dirs, files in os.walk(dr):
for name in files:
n = 1; name_orig = name
while os.path.exists(new_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig
n = n+1
newfile = new_dir+"/"+name
shutil.copy(root+"/"+name_orig, newfile)