Como mover vários arquivos de uma vez para um diretório de destino específico?

111

Eu tenho um monte de arquivos em algum diretório (junto com muitos outros arquivos) que eu quero mover.

Felizmente, todos os arquivos que eu quero mover contêm um certo identificador em seus nomes, então posso ls | grep IDENTIFIER para obter a lista exata de arquivos a serem movidos.

Mas, como posso executar mv file /path/to/dest/folder/ de uma vez, e não um por um (há muitos arquivos para mover)?

    
por gilad hoch 08.11.2012 / 14:13

11 respostas

79

Se você quiser mover ABC-IDENTIFIER-XYZ.ext ou IDENTIFIER-XYZ.xml , use:

mv *IDENTIFIER* ~/YourPath/

* é um caractere curinga para zero ou mais caracteres , isso significa zero ou mais caracteres , seguido por IDENTIFIER , seguido por zero ou mais caracteres .

Isso moverá todos os arquivos que contiverem o IDENTIFIER especificado.

    
por Evandro Silva 08.11.2012 / 14:33
161

Você poderia usar

mv -t DESTINATION file1 file2 file3

e

mv -t DESTINATION 'ls|grep IDENTIFIER'

funciona, mas não tenho certeza se mv é chamado várias vezes ou não, pois o grep gerará uma nova linha para cada correspondência.

    
por tuomaz 14.11.2012 / 12:07
16

Você pode usar curingas .

Exemplo: Para mover todos os arquivos com extensão .doc

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

Isso moverá todo o arquivo doc do diretório atual para o destino específico.

Editar

Para responder ao comentário.

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

    
por Achu 08.11.2012 / 14:21
13

Caso você queira mover um conjunto de arquivos irrelevantes (nenhum padrão comum nos nomes e tipos), você pode fazer o que o Sr. Rajanand disse: primeiro vá para o diretório que contém os arquivos que você deseja mover

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

Caso os arquivos estejam espalhados em diretórios diferentes, você só precisa especificar o caminho para cada arquivo no comando mover

    
por Ismail AL-taharwa 26.03.2014 / 05:03
10

Eu uso a técnica da tuomaz, mas ligeiramente modificada:

mv file1 file2 file3 -t DESTINATION

Acho isso mais fácil de lembrar e mais difícil de estragar, já que ele usa a mesma ordem que a operação vanilla mv:

mv file1 DESTINATION
    
por Blake Frederick 20.01.2015 / 17:11
7

Use este comando:

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

No entanto, o ls não é recomendado para esse tipo de uso. Use o comando localizar .

    
por ignite 08.11.2012 / 14:44
5

Se você tem tantos arquivos para mover, pode realmente ter muitos para o comando mv (ou outros comandos como rm ). Sugiro usar xargs para mover cada arquivo individualmente em um loop como a moda. Uma maneira de contornar isso é fazer:

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

O ls -1 (menos um) garante que haja apenas um nome de arquivo em cada linha. Se você tiver aliases ocultos para o comando ls , poderá ter vários nomes de arquivos em uma única linha e, inadvertidamente, mover um arquivo que não pretendeu mover.

    
por AggieBill 14.11.2012 / 11:05
2

Você pode usar a saída de ls para entrar em mv commnad

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

O comando entre $() retorna uma lista dos nomes de arquivos correspondentes à sua pesquisa, e isso pode ser fornecido como um parâmetro para o comando mv.

    
por Fuad Saud 13.11.2012 / 20:38
2
find -type f -name "[range]" -exec mv {} target-directory ';'

este comando moverá nomes de arquivos com qualquer padrão / intervalo para o diretório de destino.

por exemplo.

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

ele moverá arquivos com nomes como file1 , file2 ... file50000 para target-directory .

    
por user734124 07.09.2017 / 16:51
1

Usando esse comando, você pode mover vários arquivos.

mv SourceFilenames ~DestinationPath

    
por Rajanand 14.11.2012 / 11:13
0

Se os arquivos estiverem no mesmo diretório, você poderá usar

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

(testado no Ubuntu 16.04)

    
por Sruli 01.12.2017 / 10:19