Как удалить структуру каталогов с помощью командной строки (или скрипта)

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

Другими словами, у меня есть папка с большим количеством подпапок в ней. В этих подпапках нет подпапок, однако в них есть сотни файлов.

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

Это ограниченная система ресурсов, поэтому способ сделать это без двух копий всех этих файлов, которые должны существовать сразу, будет потрясающим ……

  • Как рекурсивно перечислить все скрытые файлы и каталоги?
  • Как предоставить разные разрешения для каждого пользователя?
  • Удалите файл с знаками фунта вокруг него
  • Получить самый новый файл из структуры каталога год / месяц / дата / время
  • Создать каталог из файлов и переместить файлы
  • Проверьте стандартный вывод фоновых процессов в реальном времени
  • Измельчение всего: файлы / папки и соответствующие имена файлов
  • Дублировать файл x раз в командной оболочке
  • 2 Solutions collect form web for “Как удалить структуру каталогов с помощью командной строки (или скрипта)”

    С инструментами GNU:

    cd that-dir && find . -mindepth 2 ! -type d -exec mv -it . {} + 

    Перейдите в родительский каталог и запустите

     mv -- */* . 

    ( -- необходимо, только если есть подкаталоги, имя которых начинается с - )

    Если в начальных каталогах есть файлы . (файлы точек) или подкаталоги, чье имя начинается с . , вам также нужно будет переместить их:

     mv -- */* */.[!.]* */..?* . mv -- .[!.]*/* .[!.]*/.[!.]* .[!.]*/..?* . mv -- ..?*/* ..?*/.[!.]* ..?*/..?* . 

    Убедитесь, что конфликтов нет, иначе последний файл, который вы перемещаете, будет автоматически перезаписывать ранее перенесенный файл с тем же именем. Передайте параметр -i в mv (т. mv -i */* . ) Для запроса в случае конфликта.

    Затем вы можете удалить подкаталоги:

     rmdir */ 

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

     find */ -type f -exec mv -i {} . \; 

    или, немного быстрее:

     find */ -type f -exec sh -c 'mv -i -- "$@" "$0"' . {} + 

    Еще быстрее, в не встроенной системе Linux:

     find . -mindepth 2 -type f -exec mv -it . {} + 
    Interesting Posts

    запуск рыбной раковины на новый терминал tcsh on centos

    Статистика использования процессора и ядра

    profile.d на безголовом сервере

    Постоянное изменение разрешений / var / run / postgresql

    Как обрабатывать даты ISO8601 с помощью команды date linux

    Debian не может получить доступ к Интернету, несмотря на то, что он «подключен»

    Может кто-нибудь объяснить мне эту хвост + линию?

    Как установить Linux на USB, который копирует себя в ОЗУ при загрузке, а затем снова сбрасывает измененные данные на USB при выключении?

    Как отформатировать 16-гигабайтный pendrive для хранения всего 2 ГБ

    Звуковой выход от монитора Dell U2417HA не работает в Linux

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

    Почему пользователь без какой-либо записи PASSWD в конфигурации sudo должен аутентифицироваться каждый раз?

    Программно перенаправить аудиовыход конкретной программы в файл

    Linux Mint 18 Cinnamon по умолчанию загружается в оболочку / командную строку / отключает графический интерфейс

    Внедрить включение другого файла в поток (чтение из stdin)

    Linux и Unix - лучшая ОС в мире.