Как перенести (и перезаписать) все файлы из одного каталога в другой?

Я знаю команду mv для перемещения файла из одного места в другое, но как мне переместить все файлы из одного каталога в другой (у которого есть куча других файлов), перезаписывая, если файл уже существует?

Ответ 1

Это просто mv srcdir/* targetdir/.

Если в srcdir слишком много файлов, вы можете попробовать что-то вроде следующего подхода:

cd srcdir
find -exec mv {} targetdir/ +

В отличие от \; окончательный + собирает аргументы в виде xargs, а не для выполнения mv для каждого файла.

Ответ 2

Для перемещения и перезаписывания файлов не похоже, что существует опция -R (если у вас есть сомнения, проверьте свои параметры, набрав [your_cmd] --help). Также этот ответ зависит от того, как вы хотите переместить файл. все файлы, файлы и каталоги, заменить файлы в пункте назначения и т.д.

При вводе mv --help он возвращает описание всех параметров.

Для mv синтаксис mv [option] [file_source] [file_destination]

Для перемещения простых файлов: mv image.jpg folder/image.jpg

Для перемещения по папке в пункт назначения mv folder home/folder

Чтобы переместить все файлы в источнике на расстояние mv folder/* home/folder/

Используйте -v, если вы хотите посмотреть, что делается: mv -v

Используйте -i для запроса перед перезаписью: mv -i

Используйте -u для обновления файлов в месте назначения. Он будет перемещать только исходные файлы, более новые, чем файл в пункте назначения, а когда он еще не существует: mv -u

Свяжите параметры вместе, как mv -viu и т.д.

Ответ 3

Также возможно использование rsync, например:

rsync -va --delete-after src/ dst/

где:

  • -v, --verbose: увеличить многословие
  • -a, --archive: режим архивирования; равно -rlptgoD (no -H,-A,-X)
  • --delete-after: удалить файлы на принимающей стороне после завершения передачи

Если у вас есть права root, префикс с sudo отменяет возможные проблемы с разрешением.

Ответ 4

mv -f source target

Со страницы руководства:

-f, --force
          do not prompt before overwriting

Ответ 5

В оболочке linux многие команды принимают несколько параметров и поэтому могут использоваться с wild cards. Например, если вы хотите переместить все файлы из папки A в папку B, вы пишете:

mv A/* B

Если вы хотите переместить все файлы с определенным "взглядом" на него, вы можете сделать вот так:

mv A/*.txt B

Копировать все файлы, которые являются blablabla.txt в папку B

Star (*) может заменить любое количество символов или букв в то время как? может заменить один. Например, если у вас много файлов в форме file_number.ext, и вы хотите переместить только те, у которых есть двухзначные числа, вы можете использовать такую ​​команду:

mv A/file_??.ext B

Или более сложные примеры:

mv A/fi*_??.e* B

Для файлов, которые выглядят как fi < -something → _ < -two characters → . e < -something →

В отличие от многих команд в оболочке, которые требуют -R для (например) копирования или удаления подпапок, mv делает это сам.

Помните, что mv перезаписывает, не спрашивая (если только файлы, которые были перезаписаны, не читаются или у вас нет разрешения), убедитесь, что вы ничего не теряете в этом процессе.

Для вашей будущей информации, если у вас есть вложенные папки, которые вы хотите скопировать, вы можете использовать параметр -R, говоря, что хотите выполнить команду рекурсивно. Поэтому он выглядит примерно так:

cp A/* B -R

Кстати, все, что я сказал, работает с rm (remove, delete) и cp (копирование) тоже и остерегайтесь, потому что как только вы удаляете, нет возврата! Избегайте таких команд, как rm * -R, если вы не уверены, что делаете.

Ответ 6

Если вам просто нужно ответить "y" на все запросы на перезапись, попробуйте это:

y | mv srcdir/* targetdir/