Слияние и строчные Каталоги и Файлы

У меня есть каталог как это

root/A/b/SomeFile.jpg
root/A/B/OtherFIle.jpg
root/a/D/yet_again.jpg

И я хотел бы это

root/a/b/somefile.jpg
root/a/b/otherfile.jpg
root/a/d/yet_again.jpg

ИЛИ

other_root/a/b ...

Я доволен предположением, что нет коллизий.

Как я мог сделать это в ударе или сценарии Python (или что-то предварительно созданное для сортировки файлов и каталогов)?

Я сделал бы вручную, но существуют тысячи из них.

1
задан 28.08.2014, 18:42

2 ответа

Обязательное zsh решение:

for x in root/**/*(On); do mv -i $x ${x:h}/${x:t:l}; done

Это попросит подтверждение в случае коллизии.

Объяснение: ** средства весь (sub) *directories, рекурсивно. (On) виды в уменьшении лексикографического порядка, так, чтобы каталоги всегда поднялись после их содержания. ${x:h} означает часть имени каталога $x, ${x:t} означает его базовое имя, и :l преобразовывает в нижний регистр.

Bash 4 смог делать это, так как это имеет **, но я не знаю, имеет ли это эквивалент (On).

1
ответ дан 17.12.2019, 00:36

Вот очень определенный, необщий способ решить эту проблему, которую я назвал бы 'грубой силой' в лучшем случае

import os
import re
import shutil

path = os.getcwd()
newpath = os.path.join(path,'..','newpics')
for item in os.listdir(path):
    path1 = os.path.join(path,item)
    if os.path.isdir(path1):
        for item_2 in os.listdir(path1):
            path2 = os.path.join(path1,item_2)
            for item_3 in os.listdir(path2):
                path3 = os.path.join(path2,item_3)
                item_lc = item.lower()
                item_2lc = item_2.lower()
                item_3lc = item_3.lower()
                pic_path = os.path.join(newpath,item_lc,item_2lc,item_3lc)
                print os.path.join(path,item,item_2,item_3)
                print pic_path
                try:
                    os.makedirs(os.path.join(newpath,item_lc,item_2lc))
                except OSError:
                    pass
                shutil.copyfile(path3,pic_path)
0
ответ дан 17.12.2019, 00:36

Теги

Похожие вопросы