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

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

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

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

  • Копирование большого файла вызывает чрезмерный обмен
  • Слова Grep в файле затем скопируйте файл
  • Как заменить символическую ссылку на копию файла, к которому он привязан?
  • Текстовый файл занят при копировании некоторых файлов
  • KSH: cp только на основе размера файла
  • Скопировать поверх существующих файлов без подтверждения?
  • Как скопировать с подстановочным знаком в имя каталога?
  • Какие метаданные файла сохраняются cp по умолчанию?
  • 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 .

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