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

Вопрос или проблема

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

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

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

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 указывает, насколько глубоко find должен искать, 1 означает, только в указанной в команде find директории. Вы также можете попробовать использовать 2, 3 для тестирования.

Смотрите ман страницу find на Ubuntu для детального объяснения

mv ~/Downloads/* ~/Videos

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

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

mv ~/Downloads/* ~/Videos

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

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

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

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

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)

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

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

где:

-v, --verbose: Увеличить подробность.

-a, --archive: Архивный режим; равнозначен -rlptgoD (без -H, -A, -X).

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

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

Если у вас есть привилегии root, добавьте sudo для обхода потенциальных проблем с разрешениями.

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

mv -T dir1 dir2

где:

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

Примечание: dir2 не обязательно должна существовать.

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

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

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

mv source_path/* destination_path/

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

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

Эта команда перемещает все файлы (если они не скрыты) из исходной директории в целевую директорию.

Используйте

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

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

  1. Перейдите в командную строку и войдите в директорию, в которую хотите переместить, с помощью cd folderNamehere
  2. Введите pwd. Это выведет директорию, в которую вы хотите переместить.
  3. Затем перейдите в директорию, где находятся все файлы, с помощью cd folderNamehere
  4. Теперь для перемещения всех файлов наберите mv *.* typeAnswerFromStep2here

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

попробуйте это

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

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

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

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

Эта команда должна сработать:

sudo find ~/Downloads -mindepth 1 -prune -exec mv '{}' ~/Videos \;

Она перемещает все видимые и скрытые файлы и не выдает ненужных ошибок, даже если исходная директория пуста.

Вы можете скопировать все содержимое, используя rsync, и удалить все файлы, используя --remove-source-files, удалить скопированные директории, используя find -type d | rm :

rsync -auv  --remove-source-files ./src ./dst \
&& find ./dst -type d | sed -n '1d;p' | xargs rm -rf -

Команда sed -n '1d;p' исключает первый путь директории из списка директорий, так как первая директория в списке — это директория dst!

ИЛИ вы можете запустить все в одной команде (спасибо хорошему мусульманину @muru):

find  ./dst -mindepth 1 -type d -delete

Просто хотел добавить еще один ответ. Если вы уже находитесь в папке, из которой хотите переместить файлы, вы можете сделать это:

mv * ~/Videos

.

Ответ или решение

Перемещение файлов с одного каталога в другой с использованием командной строки является важным навыком для IT-специалистов и пользователей операционных систем на базе Linux и UNIX. Рассмотрим несколько способов решения этой задачи в контексте перемещения множества файлов из папки "Downloads" в папку "Videos".

Шаги по перемещению файлов:

Общее перемещение всех файлов и папок:

Чтобы переместить все файлы и папки, включая скрытые, из каталога "Downloads" в "Videos", выполните следующую команду:

mv -v ~/Downloads/.[!.]* ~/Videos/

Уточнение вариаций перемещения:

Перемещение только файлов, исключая папки:

Если ваша задача состоит в перемещении только файлов, исключая папки, используйте команду find вместе с xargs:

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

Перемещение файлов только из указанного каталога:

Чтобы переместить только файлы из самой папки "Downloads", не затрагивая файлы в её подкаталогах, используйте флаг -maxdepth:

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

Перемещение с учётом скрытых файлов:

Если необходимо перемещать также и скрытые файлы, активируйте опцию dotglob:

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

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

(shopt -s dotglob; mv ~/Downloads/* ~/Videos/)

Альтернативные подходы:

Использование rsync:

Команда rsync предоставляет более гибкий способ перемещения файлов:

rsync -vau --remove-source-files ~/Downloads/ ~/Videos/

Итог:

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

Оцените материал
Добавить комментарий

Капча загружается...