Есть ли опция -parents для mv, как для cp?

cp имеет полезную функцию --parents которая позволяет скопировать структуру каталогов файла в другой каталог:

 $ cp -v --parents source/directory/from target/ 'source/directory/from' -> 'target/source/directory/from' 

Как мне аналогичным образом перемещать файл?

  • Переименование файлов с четными номерами
  • Переименование файлов в каталоге
  • Удалить пробелы, дефисы и подчеркивания в именах файлов?
  • Изменение имен массовых файлов?
  • Loop, чтобы применить команду к 300 файлам в каталоге и переименовать вывод, включая исходное имя входного файла плюс новый текст
  • Автоматическое перемещение файлов в каталог один за другим и только тогда, когда целевая папка пуста
  • Поиск и копирование каталогов, содержащих тип файла
  • Скопируйте файл с USB-накопителя на рабочий стол, загруженный с помощью LiveCD
  • как я могу переименовать несколько файлов, удалив символ или строку?
  • Заменить кучу файлов, поддерживающих путь
  • команда cp, которая частично разрешает символические ссылки
  • Как использовать cp -u в системе Solaris, которая не поддерживает параметр -u?
  • 2 Solutions collect form web for “Есть ли опция -parents для mv, как для cp?”

    Не напрямую, по крайней мере, не для GNU mv соответствии со своей страницей . Возможным обходным решением будет добавление такой функции:

     pmv(){ source=$1; target=$2; mkdir -p "$target"/"$(dirname $source)" mv "$source" "$target"/"$(dirname $source)"/ } 

    Добавьте эту функцию в конфигурационный файл вашей оболочки ( ~/.bashrc если вы используете bash) и выполните его следующим образом:

     pmv source/directory/from target/ 

    Есть ли способ переместить файл аналогичным образом?

    Нет . mv – довольно простая утилита, которая по возможности использует rename системного вызова (операция атомарного FS), когда источник / место назначения находятся на одном блочном устройстве, в противном случае он возвращается к cp поведению. На самом деле rename завершится неудачно, даже если вы src / dst – это одно и то же устройство, смонтированное на разных точках подключения, которые Linux разрешает.

    Поэтому, когда вам нужно переместить файлы, например:

     cp -v --parents source/directory/from target/ 

    вы можете просто подумать:

     mv source target/ 

    но имейте в виду, что это переместило бы весь контент, который все родительские директории могли бы иметь внутри, так что вам придется иметь дело с этим позже – я имею в виду разблокировать все эти дополнительные файлы, если вам нужно иметь тот же результат, что и cp --parents .

    Рано или поздно вы поймете, что то, что вы делаете, может быть легко достигнуто с помощью подхода cp / rm . И cp 's -l можно использовать, чтобы заставить его работать быстро, тем временем позволяя использовать любимые --parents . Именно по этой причине у mv не было бы ничего такого воображения, как cp 's --parents .

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