Подкатегории MV на один уровень, но не root

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

Например:

/root/sub1/aaaa/bbbb/cccc/dddd /root/sub2/aaaa/bbbb/cccc/dddd /root/sub3/aaaa/bbbb/cccc/dddd /root/sub4/aaaa/bbbb/cccc/dddd 

Это вложенные папки, в которых нет ничего, кроме следующей папки.

Я хочу проложить путь к этому

 /root/sub1/dddd /root/sub2/dddd /root/sub3/dddd /root/sub4/dddd 

Я не хочу переместить папки в корневую папку, но чуть ниже их родительской папки.

Лучшая команда, которую я могу запустить, заключается в следующем:

mv sub*/aaaa/bbbb/cccc/dddd

Однако это приведет все к корневому уровню.

Или я мог бы запускать команду внутри каждой подпапки, но это все равно было бы утомительно.

mv aaaa/bbbb/cccc/dddd

  • Печатать массив по строкам в документе здесь
  • оптимизировать команду с помощью or или pipe для анализа вывода ifconfig
  • вытягивание строк из смешанного файла строк и двоичных
  • Удалить дату и время рекурсивно из имен файлов
  • Как получить записи таблицы psql в сценарии оболочки?
  • Вызов скриптов из других скриптов
  • С помощью sed я хочу заменить первый блок текста, который соответствует
  • Проверьте, является ли условие awk совпадением в лог-файле
  • 2 Solutions collect form web for “Подкатегории MV на один уровень, но не root”

    Поскольку файлы должны заканчиваться в разных каталогах, вам нужно запустить mv несколько раз, по крайней мере один раз в каталоге назначения. Вы можете сделать это, запустив mv в цикле for .

     for x in /root/* do mv -i "$x"/*/*/*/* "$x" done 

    Тело цикла (команда mv ) выполняется для каждой записи в /root каталоге по очереди. При каждом запуске тела цикла "$x" заменяется на путь /root/subN . Команда mv -i "$x"/*/*/*/* "$x" перемещает файл, подобный /root/sub1/aaaa/bbbb/cccc/dddd в каталог /root/sub1 , то есть файл перемещается to /root/sub1/dddd .

    С опцией -i mv спросит, существует ли уже существующий файл назначения, который может произойти, если у вас есть, например, оба: /root/sub1/aaa1/bbb/ccc/ddd и /root/sub1/aaa2/bbb/ccc/ddd .

     find /root -maxdepth 6 -mindepth 6 -type d | awk -F \/ '{ print "mv "$0" "$1"/"$2"/"$3"/"$6 }' | sh 

    Используйте команду find с особым упором на максимальную и минимальную глубину каталогов, затем возьмите листинг и проанализируйте через awk, чтобы построить команду mv, которую мы можем выполнить с помощью sh. Удалите «| sh» для проверки перед добавлением для выполнения.

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