Я знаю команду 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/