Как переместить все подкаталоги в текущий каталог?

Я новичок в программировании сценариев оболочки. Предположим, у нас есть файловая иерархия, подобная этой:

/A/B/C/D
/A/B/E/F/G
/A/H/I
/A/H/J/K

Обратите внимание, что здесь у нас есть не только /A/B/.., но и /A/H/.... Все письма являются каталогами. Мы хотели бы преобразовать иерархию в:

/A/B/C
/A/B/D
/A/B/E
/A/B/F
/A/B/G
/A/H/I
/A/H/J
/A/H/K

То есть переместить все каталоги на глубину больше двух (dir A имеет глубину ноль), на глубину два. Я могу использовать JAVA и C для его реализации, но они слишком медленные. Кто-нибудь знает, как использовать сценарий оболочки для его реализации?

Псевдокод выглядит следующим образом:

for each directory D in current directory A // A may have more than one subdirectories
    for each directory d in D
        for each object in d
            if object is a directory
                move object and all descendant subdirectories of object to /A/D;
            end if
        end for
    end for
end for
1
задан 18 March 2015 в 14:42

1 ответ

for dir in /A/*; do
    find "$dir" -mindepth 2 -depth -type d -exec mv -t "$dir" -- {} \;
done

Это дает команду find искать все каталоги (-type d) по крайней мере 2 уровня под (-mindepth 2) $dir в глубину (-depth). Для каждого объекта это находит, что работает mv -t "$dir" -- <SRC>. Как всегда, mv не позволяет Вам объединять исходный каталог в существующий целевой каталог (но существуют пути вокруг этого).

можно также постараться не выполнять отдельный экземпляр mv для каждого исходного каталога:

[...] -exec mv -t "$dir" -- {} +
3
ответ дан 18 March 2015 в 14:42

Другие вопросы по тегам:

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