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

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

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

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

  • Как обновить установку управления контентом путем перезаписи существующих файлов через ssh и shell?
  • cp: предотвращать ошибку, когда источник и место назначения одинаковы
  • Является ли `--reflink = auto` безопасным для установки по умолчанию для cp?
  • Сообщение об ошибке cp использует разные цитаты на Ubuntu 12.04 (?) и Fedora 24
  • Сравните существующий файл в двух разных каталогах, скопируйте, если не существует, иначе перезапишите его
  • Как предотвратить cp от слияния двух одинаково названных каталогов?
  • Как имитировать вывод веб-камеры путем обновления файла jpg?
  • Маска ACL не работает должным образом
  • 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

    переход на systemd сценарий запуска-выключения, который работает с tmpfs и bindmounts

    Требует ли rsync как хоста-источника, так и целевого хоста запускать rsync в качестве клиента, сервера или демона?

    Выполнить скрипт bash с помощью CygWin

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

    Какой самый переносимый синтаксис для операторов `if`?

    Шифрование AES для распространения openwrt

    разрешение отклонено / dev / bus / usb /

    Можно ли заменить / изменить аргумент с помощью bash bang (!) И истории

    как выполнить git push с помощью crontab

    Перекрестное компиляция программного модуля

    Копирование текста с одного терминала на другой

    Насколько универсален переключатель -L (разыменованная символьная ссылка) команды ls?

    Как запустить команду, как если бы она вызывается из cron

    Обновление Windows 10 в папке загрузки с двойной загрузкой?

    Команда wget не работает в cronjob

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