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

152

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

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

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

Гилад Хох
источник

Ответы:

101

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

mv *IDENTIFIER* ~/YourPath/

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

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

Эвандро Сильва
источник
201

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

mv -t DESTINATION file1 file2 file3

а также

mv -t DESTINATION `ls|grep IDENTIFIER`

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

tuomaz
источник
5
работает на Linux, не уверен, будет ли он работать на Mac
Александр Миллс
3
работает на mac и git bash через git для windwows.
Брандт Соловий
11
Не работает на Mac (10.11.16 El Capitan). Но вы можете просто поместить целевую папку сзади, т.е.mv file1 file2 ... destination
Sheljohn
2
-1 для второго подхода, так как он упадет для файлов, включая новые строки
αғsнιη
24

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

Пример: переместить все файлы с расширением .doc

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

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

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

Ответить на комментарий.

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

Ачу
источник
2
но список файлов для перемещения не определяется расширением. некоторые из файлов названы: ABC-IDENTIFIER-XYZ.extа некоторые просто IDENTIFIER-XYZ.extимеют разные расширения, в основном xmlили properties.
Гилад Хох
@giladhoch Как насчет отредактированного?
Ачу
@gliadhoch Если вам так удобно использовать grep, вы можете увидеть мой ответ выше / ниже.
зажечь
не будет работать, так как есть другие .xmlфайлы (например), которые я не хочу перемещать.
Гилад Хох
20

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

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

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

Исмаил аль-Тахарва
источник
10

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

mv file1 file2 file3 -t DESTINATION

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

mv file1 DESTINATION
Блейк Фредерик
источник
Страница руководства для mvне упоминает -tвариант.
Нумен
2
linux.die.net/man/1/mv да, это так
geoyws
7

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

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

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

воспламеняться
источник
8
lsне рекомендуется для этого вида использования. Если вы хотите перечислить файлы, особенно с grepподпиской, используйте find . -name \*IDENTIFIER\*.
NorTicUs
Этот ответ был просто для демонстрации того, как вы можете использовать вывод предыдущей команды в mv. Поскольку ls | grep был упомянут в вопросе, я просто скопировал его.
зажечь
3
Как заявляет @NorTicUs, использование ls не рекомендуется. Кроме того, файлы с пробелами могут вызвать проблемы.
Пэдди Ландау
не ls
Занна
5

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

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

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

AggieBill
источник
Это также полезно, когда ваш IDENTIFIER нелегко превратить в подстановочный знак, или вы хотите использовать grep с более сложным регулярным выражением.
AggieBill
1
+1 за xargs. find почти всегда лучше и безопаснее, чем ls. находить . IDENTIFIER -exec mv {} / path / to / dest / folder \; (непроверенный код). для текущего рабочего каталога. \; завершить команду, которая будет выполнена. В зависимости от того, что вы делаете, вам, возможно, придется добавить -maxdepth 1, чтобы он не возвращался в подкаталоги.
Джо
5

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

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

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

Sruli
источник
1
Это на самом деле ничего не добавляет к существующим ответам, не правда ли?
десерт
1
просто устраняет необходимость указывать полный путь к каталогу для каждого файла
Sruli
3
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.

user734124
источник
2

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

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

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

Фуад сауд
источник
1
не ls
Занна
1

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

mv SourceFilenames ~DestinationPath

Rajanand
источник
1

Самый простой способ такой

mv {file1,file2,file3} DESTINATION

или каталог

mv {directory1,directory2,directory3} DESTINATION

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

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

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

Sabrina
источник