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

У меня есть куча файлов в каком-то каталоге (вместе со многими другими файлами), которые я хочу переместить.

К счастью, все файлы, которые я хочу переместить, содержат определенный идентификатор в своих именах, так что я могу ls | grep IDENTIFIER чтобы получить точный список файлов для перемещения.

Но как я могу выполнить mv file /path/to/dest/folder/ сразу, а не по одному (нужно переместить много файлов)?

Вы могли бы использовать:

mv -t DESTINATION file1 file2 file3

Следующее также работает, но я не уверен, что mv вызывается несколько раз или нет, как grep будет выводиться новая строка для каждого совпадения:

mv -t DESTINATION  `ls|grep IDENTIFIER`

Если ты хочешь переехать ABC-IDENTIFIER-XYZ.ext или IDENTIFIER-XYZ.xml, вы можете использовать:

mv *IDENTIFIER* ~/YourPath/

* является подстановочным знаком для ноль или более символов, это означает ноль или более символов, за которым следует IDENTIFIER, за которым следует ноль или более символов.

Это приведет к перемещению всех файлов, которые содержать то IDENTIFIER вы уточнили.

Вы можете использовать подстановочные знаки.

Например, для перемещения всех файлов, имеющих .doc расширение:

mv *.doc /path/to/dest/folder/

Это приведет к перемещению всего файла doc из текущего каталога в определенное место назначения.

Редактировать

Чтобы ответить на комментарий:

но список файлов для перемещения не определяется расширением. некоторые из файлов имеют имена: ABC-IDENTIFIER-XYZ.ext а некоторые просто IDENTIFIER-XYZ.ext все они имеют разные расширения, в основном xml или properties.

mv *.ext  *.xml *.txt /path/to/dest/folder/

Если вы хотите переместить набор произвольных файлов (нет общего шаблона в именах и типах), вы можете поступить так, как сказал г-н Раджананд: сначала перейдите в каталог, содержащий файлы, которые вы хотите переместить

mv file1.ext1 file2.ext2 file3.ext3 /destination/

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

Я использую технику туомаза, но слегка измененную:

mv file1 file2 file3 -t DESTINATION

Я нахожу, что это легче запомнить и труднее испортить, поскольку в нем используется тот же порядок, что и в операции vanilla mv:

mv file1 DESTINATION

Если файлы находятся в одном каталоге, вы можете использовать

mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/

(протестировано в Ubuntu 16.04)

Используйте эту команду:

mv `ls|grep IDENTIFIER` /path/to/dest/folder  

Однако ls не рекомендуется для такого рода использования. Воспользуйся находить вместо этого командуйте.

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 команда (или другие команды, такие как rm). Я предлагаю использовать xargs для перемещения каждого файла по отдельности в циклическом режиме. Один из способов обойти это - сделать:

ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/

То ls -1 (минус один) гарантирует, что в каждой строке будет только одно имя файла. Если у вас есть скрытые псевдонимы для ls команда вы можете иметь несколько имен файлов в одной строке и случайно переместить файл, который вы не собирались перемещать.

Самый простой способ выглядит так

mv {file1,file2,file3} DESTINATION

или каталог

mv {directory1,directory2,directory3} DESTINATION

или как файлы, так и каталоги

mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION

Надеюсь, это поможет