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

245

Я хотел бы знать, как я могу переместить все файлы из папки в другую папку с помощью командной строки.

Допустим, я нахожусь в папке «Загрузки», и я хочу переместить 100 файлов в папку «Видео» без необходимости записывать все имена файлов.

Майкл
источник
Вы спрашиваете о перемещении, filesно люди показывают вам, как двигаться не только, filesно foldersи хорошо. Это нормально?
Аскар
2
@ Hontvári Levente дал год назад ответ, который, похоже, самый лучший, чистый, простой, и он работает. Так как же он получил только 3 голоса (по сравнению с 262 за ответ, который в настоящее время находится наверху)?
Рэй Баттерворт

Ответы:

331

Откройте терминал и выполните эту команду:

mv  -v ~/Downloads/* ~/Videos/

Все файлы и папки будут перемещены из папки «Загрузки» в папку «Видео».


Чтобы переместить все файлы, но не папки:

Если вы хотите переместить все файлы (но не папки) из папки «Загрузки» в папку «Видео», используйте эту команду

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

Чтобы переместить только файлы из папок загрузки, но не из подпапок:

Если вы хотите переместить все файлы из папки «Загрузки», но не файлы внутри папок в папке «Загрузка», используйте эту команду:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

здесь -maxdepthопция указывает, насколько глубоко должен пытаться найти, что 1означает только каталог, указанный в команде поиска. Вы можете попробовать использовать 2, 3также для тестирования.

См. Справочную страницу поиска Ubuntu для подробного объяснения.

Анвар
источник
3
Вы можете использовать mv отдельно, чтобы переместить весь каталог в другую папку: mv folder ~ / Documents
JohnMerlino
20
К вашему сведению, ваша первая команда ("mv -v ~ / Downloads / * ~ / Videos /") не будет перемещать точечные файлы.
Марк Долинер
1
Да, это не переместит .files
Anwar
3
В северном направлении Ваш -print0 | xargs -0 mv -t ~/Videosможет быть более эффективно сделан с -exec mv -t ~/Videos \{\} \+:-)
artfulrobot
3
mv -v ~/Downloads/* ~/Videos/не работает для скрытых файлов
FreeLightman
28
mv ~/Downloads/* ~/Videos

Он переместит все файлы, включая подпапки, в каталог, который вы хотите mv. Если вы хотите cp(скопировать) или rm(удалить) вам понадобится -r(рекурсивная) опция для включения подпапок.

user223289
источник
2
Моя команда mv не имеет опции -R (Ubuntu 14.04).
Марк Долинер
1
@MarkDoliner, да, mvне требуется рекурсивная опция для включения подпапок. Можно использовать это также для переименования.
Ален
Мне не нужно *. То же самое произошло без использования звезды.
MycrofD
Префикс ~ / в именах папок не всегда работает (не работает в bash и git atleast)
Krish Munot
Это решение выдаст ошибку, если исходный каталог пуст.
Пьер Тибо
11

Для простого случая:

mv ~/Downloads/* ~/Videos

Если вы также хотите переместить точечные (скрытые) файлы, установите параметр оболочки dotglob .

shopt -s dotglob
mv ~/Downloads/* ~/Videos

Это оставляет опцию оболочки установленной.

Для однократного использования dotglob выполните команды в подоболочке:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)
Хонтвари Левенте
источник
Примечание для себя: последняя опция (shopt -s dotglob; mv ~/Downloads/* ~/Videos) только перемещает (режет) содержимое (включая скрытые файлы). В этом случае папка отправления и назначения должны уже существовать. В конце каталог источника становится пустым.
Патрос
Это должен быть принятый ответ
мегар
11

Это возможно с помощью rsync, например:

rsync -vau --remove-source-files src/ dst/

где:

-v, --verbose: Увеличить многословие.

-a, --archive: Режим архива; равна -rlptgoD(нет -H, -A, -X).

-u, --update: Пропустить файлы, которые новее на приемнике.

--remove-source-files Это говорит rsyncоб удалении со стороны отправки файлов (то есть не-каталогов), которые являются частью передачи и были успешно продублированы на принимающей стороне.

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

kenorb
источник
1
ПРЕДУПРЕЖДЕНИЕ! как отмечено, опция --delete-after работает не так, как вы могли бы ожидать. Он не удаляет исходные файлы после успешного копирования ... Он удаляет все оставшиеся / другие файлы в месте назначения. (как заметил @kenorb ... но я не читал достаточно внимательно! DOH)
Джей Марм
4

использование

mv -v ~/rootfolder/branch/* ~/rootfolder

Надеюсь, это поможет. Потому что у меня была такая же боль и я потратил много времени на исправление своей ошибки.

Удит Чуг
источник
2

Чтобы переместить каталог с содержимым или без него на новое имя, как если бы вы использовали mvкоманду для переименования файла:

mv -T dir1 dir2

где:

  • -T обрабатывает место назначения как обычный файл
  • dir1 оригинальное имя каталога
  • dir2 это новое имя каталога

NB: dir2не должно существовать

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

Использовать для подкаталогов

Эта команда полезна , когда многие файлы были сохранены в папке целевого каталога , т.е. Downloads/mp4. В этом примере выполнение mv -T Downloads/mp4 Videosприведет mp4к удалению подпапки, а все содержащиеся в ней файлы будут перемещены в папку «Видео».

Фейшайо Сонуби
источник
1
+1 потому что тестировал работающий в Xubuntu 14.04. Я добавил пример в этом ответе, чтобы показать, что эта команда приведет dir1к удалению. Помимо этой меры предосторожности, в этом ответе отмечено что-то хорошее для ежедневного использования.
Clearkimura
1
«Чтобы переместить каталог с контентом или без него на новое имя» Как вы можете переместить каталог ... к имени? Это не имеет смысла. "-T рассматривает место назначения как обычный файл" Как место назначения может быть файлом? Вы имеете в виду каталог?
Моника Хеднек
Это похоже на переименование файла на новое имя, как если бы вы делали что-то подобное, mv fileA fileBно -Tфлаг в этом случае рассматривает папку назначения / как файл и переименовывает его.
Фейшайо Сонуби
Работал для меня :)
Навин Кумар V
1
  1. Перейдите в командную строку и перейдите в каталог, в который вы хотите переместить его с cd folderNamehere
  2. Тип pwd. Это напечатает каталог, который вы хотите переместить тоже.
  3. Затем перейдите в каталог, где находятся все файлы с cd folderNamehere
  4. Теперь для перемещения всех типов файлов mv *.* typeAnswerFromStep2here

Это переместит все файлы из этого каталога в другой.

JRH
источник
3
Это не будет соответствовать файлам без каких-либо расширений. например , если папка содержит файлы: foo.txt, bar.а barтак bar.и barне будет перемещена. Использование *вместо того, чтобы *.*позаботиться об этом. Но в обоих случаях скрытые файлы, такие как: .foobarне будут перемещены.
Дэн,
1
mv source_path/* destination_path/

здесь вы должны поставить косую черту и *после пути к исходному тексту, чтобы он брал файлы внутри source_path вместо полного исходного каталога.

Пример: mv /home/username/test/* /home/username/test2/

Приведенная выше команда перемещает все файлы (если они не скрыты) из исходного каталога в целевой каталог.

Вивек Кумар
источник
0

попробуй

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-type с аргументом -type вы можете указать тип file.on в этом операторе, который является средним значением file.if, используя -d, который означает каталог.

-iname: наиболее распространенный и очевидный способ поиска файла - использовать аргумент -name. Если вы не уверены в его чувствительности к регистру, вы можете использовать аргумент -iname

mv {} и, наконец, указать целевой каталог, а затем переместить туда файлы, используя аргумент mv {}

педрам шабани
источник