Как я могу переместить каталог (и все вложенные файлы / каталоги), но переместить элементы в алфавитном порядке?

Когда я запускаю следующее:

mv -v foo /mnt/bar 

Каталог foo и все его подкаталоги перемещаются в каталог /mnt/bar . Порядок перемещения файлов выглядит как порядок каталогов ( ls -U ).

Есть ли хороший способ выполнить эту же операцию, но убедиться, что вложенные файлы / каталоги foo перемещены в алфавитном порядке?

Я понимаю, что могу использовать find -exec mv для перебора содержимого в алфавитном порядке, но это требует некоторой раздражающей гимнастики для поддержания той же структуры подкаталогов в цели. Я надеялся на флаг на GNU mv но страница руководства не показывает ничего полезного.

2 Solutions collect form web for “Как я могу переместить каталог (и все вложенные файлы / каталоги), но переместить элементы в алфавитном порядке?”

 $ \ls foo | xargs -I% mv -v foo/% bar 'foo/one' -> 'bar/one' 'foo/sie' -> 'bar/sie' 'foo/two' -> 'bar/two' 'foo/uve' -> 'bar/uve' 'foo/wox' -> 'bar/wox' 'foo/zanzibar' -> 'bar/zanzibar' 
  1. Используйте ls для enums элементов в алфавитном порядке. Чтобы убедиться, что вы используете чистый ls (без дополнительных символов, добавленных псевдонимом, скрытым в вашем .bashrc или .bash_aliases), введите команду \ls
  2. Отправить вывод ls в xargs
  3. Присвойте каждому элементу имя переменной с переменной -I (это просто даст вам что-то «увидеть» в вашей команде mv )
  4. Переместите ваш элемент (называемый % ) из его местоположения в foo в новое место назначения.

С zsh и реализацией pax поддерживающей -0 :

 printf '%s\0' foo foo/**/*(D) | pax -0rwdv /mnt/bar/ && rm -rf foo 

Эти рекурсивные глобусы сортируются лексически (с использованием порядка сопоставления локали) на каждом уровне. a до a/a до a/b до b

Обратите внимание, что это не то же самое, что find foo -print0 | sort -z find foo -print0 | sort -z который сортирует пути в целом и, например, сортирует:

 a a/b a/bc a/b/c 

В этом порядке в языке C вместо:

 a a/b a/b/c a/bc 

в зш шаров.

  • Как изменить имя файла, например file_name.mt2, на file_name.mt0002?
  • Перемещение файла с подстановочным знаком и добавление метки времени к имени файла
  • Как заменить файл на необработанном устройстве, сохранив целостность файловой системы?
  • Как заменить запятые в скобках
  • Странное сообщение об отказе в разрешении
  • Как я могу определить, когда мой ноутбук будет спать
  • Скопировать файл 'red' в 'смешанный' каталог в Unix?
  • Как скопировать файлы из списка имен файлов и безоговорочно сохранить существующий файл в месте назначения?
  • Получить все строки до даты, используя sed, кроме последней подходящей строки
  • Передача имен файлов в zmv
  • Извлечение определенного файла из архива с использованием 7-Zip
  • Linux и Unix - лучшая ОС в мире.