У меня есть куча файлов в некоторых каталогах (вместе со многими другими файлами), которые я хочу переместить.
К счастью, все файлы, которые я хочу переместить, содержат в именах определенный идентификатор, поэтому я могу ls | grep IDENTIFIER получить точный список файлов для перемещения.
Но как я могу выполнить mv file /path/to/dest/folder/ сразу, а не один за другим (есть много файлов для перемещения)?
Вы можете использовать
mv -t DESTINATION file1 file2 file3
и
mv -t DESTINATION `ls|grep IDENTIFIER`
, но я не уверен, что mv вызывается несколько раз или нет, поскольку grep выводит новую строку для каждого совпадения.
Вы можете использовать подстановочные знаки.
Пример: Переместить все файлы с расширением .doc
mv *.doc /path/to/dest/folder/
Это приведет к перемещению всего файла doc под текущим каталогом в конкретный пункт назначения.
Изменить
Чтобы ответить на комментарий.
mv *.ext *.xml *.txt /path/to/dest/folder/
Если вы хотите переместить набор нерелевантных файлов (нет общего шаблона в именах и типах), вы можете сделать, как сказал г-н Раджананд: сначала перейдите в каталог, содержащий файлы, которые вы хотите переместить
mv file1.ext1 file2.ext2 file3.ext3.. /destination/
Если файлы разбросаны в разных каталогах, вам нужно указать путь для каждого файла в команде move
Я использую технику tuomaz, но немного модифицирован:
mv file1 file2 file3 -t DESTINATION
Мне кажется, что это легче запомнить и сложнее испортить, поскольку он использует тот же порядок, что и ванильная mv-операция:
[ f2]Используйте эту команду:
mv `ls|grep IDENTIFIER` /path/to/dest/folder
Однако ls не рекомендуется для такого использования. Вместо этого используйте команду find.
Если у вас так много файлов для перемещения, у вас может быть слишком много для команды mv (или других команд, таких как rm). Я предлагаю использовать xargs для перемещения каждого файла по отдельности в виде цикла. Один из способов обойти это:
ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/
ls -1 (минус один) гарантирует, что в каждой строке есть только одно имя файла. Если у вас есть скрытые псевдонимы для команды ls, вы можете иметь несколько имен файлов в одной строке и непреднамеренно перемещать файл, который вы не собираетесь переместить.
Вы можете использовать вывод ls для ввода в mv commnad
mv $(ls | grep IDENTIFIER) /path/to/dest/dir
Команда между $() возвращает список имен файлов, соответствующих вашему поиску, и который может быть предоставлен как параметр для команды mv.
find -type f -name "[range]" -exec mv {} target-directory ';'
эта команда будет перемещать имена файлов с любым шаблоном / диапазоном в целевой каталог.
, например.
find -type f -name "file[1-50000]" -exec mv {} target-directory ';'
он переместит файлы с именами, такими как file1, file2 ... file50000 в target-directory.
С помощью этой команды вы можете перемещать несколько файлов.
mv SourceFilenames ~DestinationPath
Если файлы находятся в одном каталоге, вы можете использовать
mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/
(проверено в Ubuntu 16.04)