Mover arquivos dentro de sub-diretórios [RESOLVIDO]

1. Mover arquivos dentro de sub-diretórios [RESOLVIDO]

Heitor Costa
Heitor.rj

(usa Slackware)

Enviado em 18/09/2015 - 18:32h

Minha dúvida acredito que é básica: Como mover arquivos de uma pasta que está cheia de sub-diretórios para uma outra pasta.

Imagine o seguinte: Pasta hcs, dentro dela tenho 200 pastas e arquivos e que dentro das mesmas mais pastas e arquivos, digamos que existam 25.000 arquivos de vários tipos (Extensões) e 600 pastas, tudo dentro da pasta hcs.

O que eu desejo é mover todos os arquivos png existentes em /home/hcs para a pasta /home/png

Tentando o comando mv /home/hcs/*.png /home/png
É claro que não funciona porque ele não olha as sub-pastas. Outro problema é que se existirem arquivos com o mesmo nome ele substituiria ao invés de não mover ou renomeá-los com outro nome.

Alguém sabe fazer isso? Pelo Terminal Linux, sem usar Interface Gráfica?

Agradeço quem souber fazer e responder...


  


2. MELHOR RESPOSTA

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 19/09/2015 - 00:00h

Heitor.rj escreveu:

Tony minha dúvida que ficou no seu comando é o seguinte:
1) Como esse comando trataria os arquivos com o mesmo nome que estariam em pastas diferentes? Ele substituiria eles, ou renomearia na hora que copiar?

Ele apenas não moveria o arquivo ( a opção -n do mv é a responsável por esse feito)

2) Para fins didáticos e entender o comando acima o que siginificaria {} ?

As chaves significam os resultados encontrados pelo find, ou seja, os arquivos png.
3) Está correto o que eu entendi? Vc usou na mesma linha 2 comandos, o find e o mv com os parâmetros após ele. Certo?

Exato. O find apos encontrar os arquivos, executa o comando mv -n {argumentos/arquivos encontrados} para /home/png/, por isso usamos o argumento -exec ( ele executa o comando a sua direita). Para ficar mais claro, segue o comando inteiro explicado:
find /home/hcs/ -type f -iname "*.png" -exec mv -n {} /home/png/ \;  

find : o comando
/home/hcs/ : Local onde procurar
-type f : Especifica que o tipo do objeto procurado é um arquivo (f= file)
-iname "*.png" : especifica que o nome(name) do arquivo deve ser *.png (qualquer coisa que termine com .png). O "i" antes do name determina que deve adotar o modo case Insensitive, ou seja, maiúscula ou minúsculas independentemente de como escrevi.
-exec mv -n {} /home/png/ \; : Como expliquei acima: executa o comando mv -n {arquivos encontrados} para /home/png/, por isso usamos a opção -exec do find ( ele executa o comando a sua direita). O caractere " ; " determina o fim do comando, porém deve ser precedido de uma barra invertida(\) para não correr o risco de ser interpretado como parte do comando anterior.


Importante: Quero deixar claro que isso não é um exercício de curso, já respondi sobre minhas intenções. No momento não estou podendo pagar um Curso de Linux que claro seria muito apropriado, visto que vou precisar de muitas informações complexas sobre o funcionamento do Slack, por isso estou aos poucos tirando minhas dúvidas em fórum e aprendendo inicialmente o básico de coisas que uso em Windows, para depois quando eu souber usar o Linux como um usuário normal (SEM KDE), aprender mais sobre o Sistema e Programação em C. Mas estou fazendo uma coisa de cada vez.


Fique tranquilo! Estamos aqui para ajudarmos uns aos outros. Parabéns pela força de vontade!!
Aproveito também para explicar, em defesa do @Erisjr, que tenho a mais absoluta certeza que a intenção dele não foi julgar ou ofender. Como ele mesmo disse no post em resposta ao meu:
a função do fórum é trocar conhecimento.
Só postei aquilo para não atrapalhar possivelmente o curso de alguém (Lembrei de ter feito um exercício parecido). Porem como quem usa corretamente uma ferramenta por vezes é "julgado" pelas atitudes dos que não o fazem, é possível sim que ele precise da solução para um problema real e aí, problema resolvido.

Ele é um cara do bem, manja muito e esta sempre ajudando a todos. Tenho certeza que foi um mal entendido :)

O mestre @lcavalheiro deu uma sugestão pra lá de importante: o -execdir ao invés do -exec. Portanto, o comando ficaria assim:

find /home/hcs/ -type f -iname "*.png" -execdir mv -n {} /home/png/ \;


Lendo suas respostas ao mestre @EDPS, entendi que vc quer renomear os arquivos iguais e não somente ignorá-los. Então o comando correto seria:

find /home/hcs/ -type f -iname "*.png" -execdir mv --backup=t {} /home/png/ \; 


O --backup=t fara com que o mv, no caso de encontrar arquivos iguais, crie arquivos numerados (por exemplo: foto.png foto~1.png foto~2.png etc...)

Bom, acho que é isso! rs

Abraço

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---

3. Re: Mover arquivos dentro de sub-diretórios [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/09/2015 - 18:49h

Como esta com cara de exercício de curso não seria legal passar resposta. Uma possível forma de fazer seria usando os comandos find, xargs e mv, então uma pesquisa rápida sobre eles e alguns testes resolvem seu problema.



------------------------------------------------------
KISS principle, RTFM and STFW = 42


4. Re: Mover arquivos dentro de sub-diretórios [RESOLVIDO]

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/09/2015 - 18:54h

Olá,

Supondo que a pasta png ja exista:

find /home/hcs/ -type f -iname "*.png" -exec mv -n {} /home/png/ \;

abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


5. Re: Mover arquivos dentro de sub-diretórios [RESOLVIDO]

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/09/2015 - 18:55h

erisrjr escreveu:

Como esta com cara de exercício de curso não seria legal passar resposta. Uma possível forma de fazer seria usando os comandos find, xargs e mv, então uma pesquisa rápida sobre eles e alguns testes resolvem seu problema.



------------------------------------------------------
KISS principle, RTFM and STFW = 42


Puuuuutz,

Mals Eris, agora que me toquei :(





---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


6. Re: Mover arquivos dentro de sub-diretórios

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/09/2015 - 19:08h

tonyhts escreveu:
...

Puuuuutz,

Mals Eris, agora que me toquei :(

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


Sem problemas, a função do fórum é trocar conhecimento.
Só postei aquilo para não atrapalhar possivelmente o curso de alguém (Lembrei de ter feito um exercício parecido). Porem como quem usa corretamente uma ferramenta por vezes é "julgado" pelas atitudes dos que não o fazem, é possível sim que ele precise da solução para um problema real e aí, problema resolvido.

*De quebra fez sem o xargs, na hora sequer me lembrei que poderia usar "exec" no find.
------------------------------------------------------
KISS principle, RTFM and STFW = 42


7. Re: Mover arquivos dentro de sub-diretórios [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 18/09/2015 - 20:55h

erisrjr escreveu:

tonyhts escreveu:
...

Puuuuutz,

Mals Eris, agora que me toquei :(

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


Sem problemas, a função do fórum é trocar conhecimento.
Só postei aquilo para não atrapalhar possivelmente o curso de alguém (Lembrei de ter feito um exercício parecido). Porem como quem usa corretamente uma ferramenta por vezes é "julgado" pelas atitudes dos que não o fazem, é possível sim que ele precise da solução para um problema real e aí, problema resolvido.

*De quebra fez sem o xargs, na hora sequer me lembrei que poderia usar "exec" no find.
------------------------------------------------------
KISS principle, RTFM and STFW = 42


Melhor usar o execdir, que executa o comando no diretório em que o arquivo se localiza. O exec executa o comando no diretório em que o shell estava na hora que o find foi chamado. Isso faz diferença na hora de usar caminhos relativos no comando.

--
Luís Fernando Carvalho Cavalheiro
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta


8. Resposta

Heitor Costa
Heitor.rj

(usa Slackware)

Enviado em 18/09/2015 - 21:49h

erisrjr escreveu:
Como esta com cara de exercício de curso não seria legal passar resposta. Uma possível forma de fazer seria usando os comandos find, xargs e mv, então uma pesquisa rápida sobre eles e alguns testes resolvem seu problema.


Meu amigo, primeiro acho que você deveria perguntar ao invés de JULGAR precipitadamente. Eu tenho 44 anos, não estou fazendo curso algum de Slackware.

Minha dúvidas são baseadas, porque parei de usar o Rwindows que sempre corrompem arquivos importantes de trabalhos meus para usar em definitivo o Slackware.

A dúvida é porque possuo uma pasta com mais de 900.000 arquivos de um HD Externo meu com trabalhos que eu fiz ao longo dos últimos 15 anos. E que nem todos esses arquivos eu preciso trazer para minha partição linux, e antes de deletá-los definitivamente estou querendo trazer todos os arquivos com a extensão .hxcs que são arquivos de Banco de Dados meus (Esses são importantes) e imagens de diversas extensões que posso reaproveitá-las.

Como sou iniciante em Linux, estou tendo que aprender o ABC do Sistema Operacional, claro que eu poderia pelo Windows fazer isso mais rápido, pois tenho programas que me facilitariam nisso, porém como preciso aprender profundamente o Linux e de preferência comandos de Terminal, pois meu objetivo final é usar apenas o terminal, reduzindo o Slackware ao menor tamanho possível.

Obviamente antes de fazer a pergunta que fiz, já busquei de inúmeras formas como se faz pelo Google, mas não achei nenhuma resposta que trata-se do assunto, sem excluir arquivos com mesmo nome, já que estariam em pastas separadas, ou mesmo na Documentação linux do comando MV não achei essa opção. Por isso pedi ajuda. Então não me julgue. Pois acho que responder pela metade a qualquer pessoa é o mesmo que não responder. Quando me pedem ajuda, ou me perguntam algo que eu sei responder, faço isso com Boa vontade e respondo sempre o mais completo e detalhado possível, porém Linux não é minha área, porém desejo sim me tornar um expert em Hardware e Software em Linux assim como conheço a fundo o Windows desde a época do DOS, porque se na época eu tivesse me dedicado ao Linux acredito que eu não teria os problemas que me trouxeram prejuizos com perda de arquivos por corrompimento, quando precisei migrar arquivos para Hds novos.



9. Re: Mover arquivos dentro de sub-diretórios [RESOLVIDO]

Heitor Costa
Heitor.rj

(usa Slackware)

Enviado em 18/09/2015 - 22:03h

tonyhts escreveu:
Olá,
Supondo que a pasta png ja exista:
find /home/hcs/ -type f -iname "*.png" -exec mv -n {} /home/png/ \;


Tony minha dúvida que ficou no seu comando é o seguinte:
1) Como esse comando trataria os arquivos com o mesmo nome que estariam em pastas diferentes? Ele substituiria eles, ou renomearia na hora que copiar?
2) Para fins didáticos e entender o comando acima o que siginificaria {} ?
3) Está correto o que eu entendi? Vc usou na mesma linha 2 comandos, o find e o mv com os parâmetros após ele. Certo?

Importante: Quero deixar claro que isso não é um exercício de curso, já respondi sobre minhas intenções. No momento não estou podendo pagar um Curso de Linux que claro seria muito apropriado, visto que vou precisar de muitas informações complexas sobre o funcionamento do Slack, por isso estou aos poucos tirando minhas dúvidas em fórum e aprendendo inicialmente o básico de coisas que uso em Windows, para depois quando eu souber usar o Linux como um usuário normal (SEM KDE), aprender mais sobre o Sistema e Programação em C. Mas estou fazendo uma coisa de cada vez.

Até porque ainda nem decidi que Codificação irei usar ainda pois não cheguei a nenhuma conclusão se devo usar o Padrão Slack que é en_US com ISO-8859-1 ou se uso UTF-8 pois embora decidi usar o Slack em inglês e apenas o teclado em ABNT2 meu Firefox quando salva arquivos bagunça os acentos. Estou mais tentado a escolher o Padrão mesmo para ter compatibilidade com Hds Externos do Windows, pois caso eu precise enviar algo para Hds NTFS preciso que os acentos sejam reconhecidos corretamente pelo Windows em Pcs de outras pessoas.


10. Re: Mover arquivos dentro de sub-diretórios [RESOLVIDO]

edps
edps

(usa Slackware)

Enviado em 18/09/2015 - 22:25h


Se está preocupado com arquivos de mesmo nome, primeiramente você deveria checar se não há algo duplicado, nesse caso:

http://www.vivaolinux.com.br/artigo/Arquivos-duplicados-fdupes-neles


11. Re: Mover arquivos dentro de sub-diretórios [RESOLVIDO]

Heitor Costa
Heitor.rj

(usa Slackware)

Enviado em 18/09/2015 - 22:44h

edps escreveu:
Se está preocupado com arquivos de mesmo nome, primeiramente você deveria checar se não há algo duplicado, nesse caso:
http://www.vivaolinux.com.br/artigo/Arquivos-duplicados-fdupes-neles


Sim, existem muitos arquivos com mesmo nome, mas nenhum duplicado, apenas possuem o mesmo nome, como Imagens iguais porém que possuem resoluções diferentes. Então meu objetivo não é removê-los pois não são duplicados.

Mas agradeço o Link pois estudarei isso também pois eu usava o No-Clone no Windows para remover duplicados, e esse seu Link pode me servir futuramente quando eu precisar tratar arquivos de Backups antigos.




12. Re: Mover arquivos dentro de sub-diretórios [RESOLVIDO]

edps
edps

(usa Slackware)

Enviado em 18/09/2015 - 22:56h


AInda para o caso dos duplicados (embora não seja o seu caso), 3º comentário:

http://www.vivaolinux.com.br/topico/Shell-Script/Localizar-arquivos-duplicados-por-conteudo

Se fossem arquivos recuparados seria moleza:

https://edpsblog.wordpress.com/2013/07/09/dobradinha-photorec-fdupes/

Porque o photorec nomeia por ordem cada arquivo recuperado de uma partição, logo, poderá existir "n" versões para um mesmo arquivo, e é aí que entra o fdupes.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts