Сведение вложенного каталога & Иерархия файлов из командной строки Mac OS X

Anonim

Вам когда-нибудь приходилось сглаживать структуру каталогов, перемещая все содержимое файлов из дочерних папок каталогов в одну папку? Хотя вы можете сделать это вручную, перемещая файлы и папки из файловой системы Mac OS X или Linux, более быстрый вариант — обратиться к командной строке. Возможно, в какой-то момент вы создали вложенную иерархию каталогов, которую теперь нужно отменить, переместив все файлы из этих вложенных папок обратно в один каталог, или, может быть, вы хотите упростить структуру каталогов, какой бы ни была причина, это трюк работает очень хорошо.

Использование командной строки для выравнивания файлов и структур каталогов, очевидно, лучше всего зарезервировано для опытных пользователей, которым удобно пользоваться терминалом в целом, если это не относится к вам, рассмотрите возможность выполнения этого вручную через Finder. или с помощью приложения Mac Automator для аналогичной автоматизации операций с файловой системой. Однако здесь мы сосредоточимся на выравнивании каталогов из командной строки.

Пример сведения вложенного файлового каталога

Чтобы лучше понять, чего мы пытаемся достичь, давайте возьмем в качестве примера воображаемую структуру каталогов под названием TestDirectory, расположенную в домашней папке пользователя. В этом примере TestDirectory содержит вложенные папки, такие как SubDirectory1, SubDirectory2, SubDirectory3 и т. д., каждая из которых содержит файлы в соответствующих папках. Что мы хотим сделать здесь, так это сгладить структуру каталогов, переместив все файлы из SubDirectory(X) в родительский каталог «TestDirectory».Исходный каталог и содержимое, отображаемые рекурсивно с помощью , могут выглядеть примерно так:

$ find ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory/SampleDirectory3/test2.jpg

Чтобы свести содержимое этого каталога и подкаталога обратно в папку TestDirectory, используйте следующую командную строку:

find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'

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

~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg

Обратите внимание, что подкаталоги все еще будут существовать, просто они будут пустыми. Есть смысл? Если нет, или если это не демонстрирует, чего вы хотите достичь, вы, вероятно, вообще не хотите сглаживать каталог, возможно, вы хотите выполнить слияние или использовать то же самое для создания сложной копии в другом месте.

Сведение структуры каталогов и иерархии вложенных файлов с помощью командной строки

Готовы продолжить? Командная строка, которую мы собираемся использовать для выравнивания структуры каталогов и перемещения всех файлов из подкаталогов в базу целевого каталога, выглядит следующим образом:

find -mindepth 2 -type f -exec mv -i '{}' ';'

Замените каталогом по вашему выбору для выравнивания, как показано в примере выше.

Да, каталог дважды появляется в командной строке, первый раз — это каталог, в котором выполняется поиск для выравнивания подкаталогов, а второй раз — место назначения для найденных элементов.

Будьте точны с указанным местом назначения, потому что это необратимо (ну, по крайней мере, без большого количества ручной работы с вашей стороны), поэтому делайте это только в том случае, если вы абсолютно уверены, что хотите переместить все файлы в целевых каталогах дочерних каталогов обратно в целевую корневую папку.

Как упоминалось ранее, вы также можете сделать это в Finder OS X или, по крайней мере, наблюдать за изменениями файлов и папок в Finder. Option + щелчок по маленьким стрелкам в представлении «Список» открывает все подкаталоги, показывая иерархию папок следующим образом:

После экспериментов с различными альтернативами bash и zsh один из комментаторов на StackExcange оставил этот удобный прием, и он оказался самым простым и наиболее совместимым методом. Если вы знаете лучший способ сгладить вложенный каталог, сообщите нам об этом в комментариях!

Сведение вложенного каталога & Иерархия файлов из командной строки Mac OS X