Как с помощью одной команды собрать все файлы из вложенных папок в одном месте

В процессе работы за компьютером у пользователей скапливаются большие объемы файлов и папок, образующих сложную вложенную иерархию. Многие любят раскладывать все по полочкам, создавая директории и вложенные поддиректории, но однажды может возникнуть необходимость ликвидировать эту сложную структуру. В среде OS X это быстрее всего можно сделать с помощью командной строки.

Причин у такого действия может быть достаточно много. Возможно, вам необходимо собрать файлы из всех вложенных папок в единую директорию, а возможно пришло время избавиться от лишних директорий. Так или иначе, рассматриваемый нами метод поможет переместить все вложенные файлы в одну папку.

Для наглядности мы создали пример такой структуры. Общая папка называется TestDirectory. Она в свою очередь содержит вложенные папки с названиями SubDirectory1, SubDirectory2 и SubDirectory3. Каждая поддиректория содержит перечень вложенных файлов. Наша задача – переместить все файлы в корневую папку 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

Для осуществления нашей задачи необходимо в Терминале использовать команду:

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 [DIRECTORY] -mindepth 2 -type f -exec mv -i '{}' [DIRECTORY] ';'

Важно знать, что параметр DIRECTORY повторяется в ней дважды и не всегда он является одним и тем же. Первое упоминание директории – это тот каталог, который содержит вложенные файлы и папки. Второе – это то место, куда будут перемещены все обнаруженные файлы. Поэтому не всегда корневая папка будет тем местом, куда будут сложены файлы.

Напоминаем, что перемещение файлов подобным образом необратимо. Нет такой команды, которая вернет все файлы обратно в подпапки. Единственный вариант, это распределять их вручную, что при больших объемах файлов может быть проблематичным.


Рейтинг редакции:7
1 Star2 Stars3 Stars4 Stars5 Stars6 Stars7 Stars8 Stars9 Stars10 Stars (проголосовали 4, рейтинг: 9,50)
Загрузка...
Рейтинг читателей:9,5



Автор:
Верю в то, что мобильные устройства захватят мир.

Комментарии

  1. Нат говорит:

    Не срабатывает. Пишет:
    find: -exec: no terminating «;» or «+»
    -bash: ’: command not found

Оставьте комментарий

© 2011 Программы для Mac OS, iPhone и iPad