В процессе работы за компьютером у пользователей скапливаются большие объемы файлов и папок, образующих сложную вложенную иерархию. Многие любят раскладывать все по полочкам, создавая директории и вложенные поддиректории, но однажды может возникнуть необходимость ликвидировать эту сложную структуру. В среде 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 повторяется в ней дважды и не всегда он является одним и тем же. Первое упоминание директории – это тот каталог, который содержит вложенные файлы и папки. Второе – это то место, куда будут перемещены все обнаруженные файлы. Поэтому не всегда корневая папка будет тем местом, куда будут сложены файлы.
Напоминаем, что перемещение файлов подобным образом необратимо. Нет такой команды, которая вернет все файлы обратно в подпапки. Единственный вариант, это распределять их вручную, что при больших объемах файлов может быть проблематичным.
Не срабатывает. Пишет:
find: -exec: no terminating «;» or «+»
-bash: ’: command not found
тоже искал ответ. вот что дал chatGPT и у меня сработало.
в терминале пишем
cd /путь/к/вашей/папке
потом, если надо медиафайлы, то указываем расширение
find . -type f \( -iname «*.jpg» -o -iname «*.mp4» \) -exec mv {} /путь/к/цельевой/папке \;
если просто все файлы, то
find . -type f -exec mv {} /путь/к/цельевой/папке \;