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

102

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

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

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

    
задан gilad hoch 08.11.2012 в 13:13
источник

11 ответов

74

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

mv *IDENTIFIER* ~/YourPath/

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

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

    
ответ дан Evandro Silva 08.11.2012 в 13:33
источник
150

Вы можете использовать

mv -t DESTINATION file1 file2 file3

и

mv -t DESTINATION 'ls|grep IDENTIFIER'

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

ответ дан tuomaz 14.11.2012 в 11:07
16

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

Пример: перемещение всех файлов с расширением .doc

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

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

Edit

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

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

ответ дан Achu 08.11.2012 в 13:21
12

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

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

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

    
ответ дан Ismail AL-taharwa 26.03.2014 в 04:03
10

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

mv file1 file2 file3 -t DESTINATION

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

mv file1 DESTINATION
    
ответ дан Blake Frederick 20.01.2015 в 16:11
7

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

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

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

    
ответ дан ignite 08.11.2012 в 13:44
5

Если у вас так много файлов для перемещения, у вас может быть слишком много для команды mv (или других команд, таких как rm ). Я предлагаю использовать xargs для перемещения каждого файла по отдельности в виде цикла. Один из способов обойти это:

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

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

ответ дан AggieBill 14.11.2012 в 10:05
2

Вы можете использовать вывод ls для ввода в mv commnad

mv $(ls | grep IDENTIFIER) /path/to/dest/dir

Команда между $() возвращает список имен файлов, соответствующих вашему поиску, и который может быть предоставлен в качестве параметра для команды mv.

    
ответ дан Fuad Saud 13.11.2012 в 19:38
2
find -type f -name "[range]" -exec mv {} target-directory ';'

эта команда будет перемещать имена файлов с любым шаблоном / диапазоном в целевой каталог.

например.

find -type f -name "file[1-50000]" -exec mv {} target-directory ';'

он будет перемещать файлы с именами, такими как file1 , file2 ... file50000 to target-directory .

    
ответ дан user734124 07.09.2017 в 14:51
1

С помощью этой команды вы можете перемещать несколько файлов.

mv SourceFilenames ~DestinationPath     

ответ дан Rajanand 14.11.2012 в 10:13
0

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

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

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

    
ответ дан Sruli 01.12.2017 в 09:19