Como mover todos os arquivos de uma pasta para outra usando a linha de comando?

245

Gostaria de saber como mover todos os arquivos de uma pasta para outra pasta com uma linha de comando.

Digamos que eu esteja na minha pasta Downloads e há 100 arquivos que eu gostaria de mover para a minha pasta Vídeos, sem precisar escrever o nome de todos os arquivos.

Michael
fonte
Você está perguntando sobre a mudança, filesmas as pessoas mostram como se mover não apenas filesmas folderstambém. Tudo bem?
Askar
2
@ Hontvári Levente respondeu há um ano que parece ser de longe o melhor, limpo, simples e funciona. Então, como conseguiu apenas 3 votos (em comparação com 262 para a resposta atualmente no topo)?
Ray Butterworth

Respostas:

331

Abra um terminal e execute este comando:

mv  -v ~/Downloads/* ~/Videos/

Ele moverá todos os arquivos e pastas da pasta Downloads para a pasta Vídeos.


Para mover todos os arquivos, mas não as pastas:

Se você estiver interessado em mover todos os arquivos (mas não as pastas) da pasta Downloads para a pasta Vídeos, use este comando

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

Para mover apenas arquivos das pastas de Download, mas não das subpastas:

Se você deseja mover todos os arquivos da pasta Downloads, mas não arquivos dentro das pastas da pasta Download, use este comando:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

aqui, a -maxdepthopção especifica o quão profundo o find deve tentar, 1significa apenas o diretório especificado no comando find. Você pode tentar usar 2, 3também para testar.

Veja a página de manual do Ubuntu para uma explicação detalhada

Anwar
fonte
3
você pode usar o mv sozinho para mover um diretório inteiro para outra pasta: pasta do mv ~ / Documents
#
20
Para sua informação, acredito que seu primeiro comando ("mv -v ~ / Downloads / * ~ / Videos /") não moverá arquivos de ponto.
Mark Doliner
1
Sim, ele não moverá os arquivos
Anwar
3
Nb. o seu -print0 | xargs -0 mv -t ~/Videospode ser mais eficientemente feito com -exec mv -t ~/Videos \{\} \+:-)
artfulrobot
3
mv -v ~/Downloads/* ~/Videos/não funciona para arquivos ocultos
FreeLightman 18/18
28
mv ~/Downloads/* ~/Videos

Ele moverá todos os arquivos, incluindo subpastas no diretório que você deseja mv. Se você deseja cp(copiar) ou rm(remover), precisará da -ropção (recursiva) para incluir subpastas.

user223289
fonte
2
Meu comando mv não tem uma opção -R (Ubuntu 14.04).
Mark Doliner
1
@ MarkDoliner, sim, mvnão precisa da opção recursiva para incluir subpastas. Pode-se usá-lo também para renomear.
Alen
Eu não precisava de *. A mesma coisa aconteceu sem usar a estrela.
22617 MycrofD
O ~ / no prefixo dos nomes das pastas nem sempre funciona (não funciona em bash e pelo menos git)
Krish Munot
Esta solução causará um erro se o diretório de origem estiver vazio.
26618 Pierre Thibault
11

Para o caso simples:

mv ~/Downloads/* ~/Videos

Se você deseja mover arquivos ponto (oculto) também, defina a opção shell do dotglob .

shopt -s dotglob
mv ~/Downloads/* ~/Videos

Isso deixa o conjunto de opções do shell.

Para usar o dotglob uma vez, execute os comandos em um subshell:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)
Hontvári Levente
fonte
Uma nota para mim mesmo: A última opção (shopt -s dotglob; mv ~/Downloads/* ~/Videos) única move (cortes) o conteúdo (incluindo os arquivos ocultos). Nesse caso, as pastas de origem e destino já devem existir. No final, o diretório de origem fica vazio.
Pathros 26/04
Esta deve ser a resposta aceita
megar
11

É possível usando rsync, por exemplo:

rsync -vau --remove-source-files src/ dst/

Onde:

-v, --verbose: Aumenta a verbosidade.

-a, --archive: Modo de arquivo; é igual -rlptgoD(sem -H, -A, -X).

-u, --update: Pula os arquivos mais recentes no receptor.

--remove-source-files Isso diz rsyncpara remover do lado de envio os arquivos (que não são diretórios) que fazem parte da transferência e que foram duplicados com sucesso no lado de recebimento.

Se você tiver privilégios de root, prefixe com sudopara substituir possíveis problemas de permissão.

kenorb
fonte
1
AVISO! a opção --delete-after, conforme observado, não funciona da maneira que você espera. Ele não exclui os arquivos de origem após a cópia bem-sucedida ... EXCLUI TODOS OS ARQUIVOS RESTANTES / OUTROS NO DESTINO. (como @kenorb notou ... mas eu não ler atentamente o suficiente DOH!)
Jay Marm
4

Usar

mv -v ~/rootfolder/branch/* ~/rootfolder

Eu espero que isso ajude. Porque tive a mesma dor e perdi muito tempo consertando meu erro.

Udit Chugh
fonte
2

Para mover um diretório com ou sem conteúdo para seu novo nome, da mesma maneira que você usaria o mvcomando para renomear um arquivo:

mv -T dir1 dir2

Onde:

  • -T trata o destino como um arquivo normal
  • dir1 é o nome original do diretório
  • dir2 é o novo nome do diretório

NB: dir2não precisa existir.

Espero que isso economize muito tempo para alguém, como noob, antes disso, eu criaria um diretório com o novo nome e depois moveria o conteúdo do diretório para o diretório criado anteriormente.

Use para subdiretórios

Este comando é útil quando muitos arquivos foram salvos em uma subpasta do diretório de destino, ou seja Downloads/mp4. Neste exemplo, a execução mv -T Downloads/mp4 Videosresultará na remoção damp4 subpasta e todos os arquivos contidos nela serão movidos para a pasta Vídeos.

Feyisayo Sonubi
fonte
1
+1 porque testado trabalhando no Xubuntu 14.04. Eu adicionei um exemplo nesta resposta para mostrar que este comando fará com que o dir1seja removido. Além dessa precaução, esta resposta notou algo de bom para o uso diário.
clearkimura
1
"Para mover um diretório com ou sem conteúdo para seu novo nome" Como você pode mover um diretório ... para um nome? Isso não faz sentido. "-T trata o destino como um arquivo normal" Como um destino pode ser um arquivo? Você quer dizer diretório?
Monica Heddneck
É como renomear um arquivo para seu novo nome, como você faria com algo parecido, mv fileA fileBmas a -Tbandeira nesse caso trata o diretório de destino / como um arquivo e o renomeia.
Feyisayo Sonubi
Trabalhou para mim :)
Naveen Kumar V
1
  1. Vá para a linha de comando e entre no diretório para o qual deseja movê-lo cd folderNamehere
  2. Digite pwd. Isso também imprimirá o diretório que você deseja movê-lo.
  3. Em seguida, mude para o diretório em que todos os arquivos estão com cd folderNamehere
  4. Agora, para mover todos os tipos de arquivos mv *.* typeAnswerFromStep2here

Isso moverá todos os arquivos desse diretório para o outro.

jrh
fonte
3
Isso não corresponderá a arquivos sem nenhuma extensão. por exemplo, se uma pasta tem os arquivos: foo.txt, bar.e bartanto bar.e barnão será movida. Usar em *vez de *.*cuida disso. Mas nos dois casos, arquivos ocultos como: .foobarnão serão movidos.
21413 Dan
1
mv source_path/* destination_path/

aqui você tem que apresentar barra e *após o caminho de origem para que ele leve os arquivos para dentro do caminho_de_origem, em vez do diretório de origem completo.

Exemplo: mv /home/username/test/* /home/username/test2/

O comando acima move todos os arquivos (a menos que estejam ocultos) no diretório de origem para o diretório de destino.

vivek Kumar
fonte
0

tente

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-type com o argumento -type, você pode especificar o tipo file.on nesta instrução que é o arquivo médio.se usar of -d que significa diretório.

-iname: o método mais comum e óbvio para procurar um arquivo é usar o argumento -name.se você não tiver certeza sobre a distinção entre maiúsculas e minúsculas, pode usar o argumento -iname

mv {} e, finalmente, para especificar o diretório de destino e, em seguida, mover os arquivos para lá usando o argumento mv {}

pedram shabani
fonte