- Вопрос или проблема
- Ответ или решение
- Шаги по перемещению файлов:
- Общее перемещение всех файлов и папок:
- Уточнение вариаций перемещения:
- Перемещение только файлов, исключая папки:
- Перемещение файлов только из указанного каталога:
- Перемещение с учётом скрытых файлов:
- Альтернативные подходы:
- Использование rsync:
- Итог:
Вопрос или проблема
Я хотел бы узнать, как переместить все файлы из одной папки в другую с помощью командной строки.
Допустим, я нахожусь в папке Загрузки, и там есть 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
Надеюсь, это поможет. Потому что у меня была такая же проблема, и я потратил много времени на исправление своей ошибки.
- Перейдите в командную строку и войдите в директорию, в которую хотите переместить, с помощью
cd folderNamehere
- Введите
pwd
. Это выведет директорию, в которую вы хотите переместить. - Затем перейдите в директорию, где находятся все файлы, с помощью
cd folderNamehere
- Теперь для перемещения всех файлов наберите
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/
Итог:
Перемещение файлов с использованием командной строки предоставляет широкий спектр возможностей для эффективного управления файлами, даже при работе с большим количеством данных. Используя приведённые команды, вы можете эффективно выполнить задачу, адаптировав команды к вашим уникальным требованиям. Важно точно идентифицировать нужные параметры и опции для достижения желаемого результата без потерь данных.