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 ---