o comando criou as pasta mas não no diretorio que eu queria: direto no /media/MARCOS, mas em /media/Marcos/dados/ ou seja ele criou uma copia do diretório no diretório de destino
Amigo, isso não me parece problema, me parece que esta se perdendo na sua estrutura de diretorios.
Vou tentar ser mais claro, tentar facilitar mais, por que você deu uma emperrada em algo que em nada tem a ver com o script, deu uma emperrada em um problema que nem diria que é de iniciante, mas de aspirante a aspirante de iniciante. Acredito que tenha sido falta de atenção, mas se não foi, para tudo que cedo ou tarde vai cometer um erro banal e grave, como remover a pasta /usr/bin.
Vamos supor que a origem dos dados é /home/dados, ok?Se você
NÃO quer os dados direto no /media/MARCOS, mas em /media/Marcos/dados/, o comando tem de ser dado
fora da pasta dados.
Se você
QUER os dados direto no /media/MARCOS, o comando tem de ser dado
dentro da pasta
Dados com uma
leve e óbvia alteração.
Essa pequena alteração é muito óbvia, nem precisa ser citada pois apenas o conhecimento básico do básico de manipulação de arquivos é necessário (comandos cd, cp, mv...).
Se você não enxergou esse detalhe então ta seguindo a linha errada, tem de saber isso antes de querer criar um script, tem de saber se é necessário entrar ou não em um diretório, afinal,
se você deu o comando find Dados... na pasta home, e a pasta Dados (Que existe dentro de home) foi criada no destino, para criar as pastas que estão dentro de Dados no destino sem criar a pasta Dados, basta entrar dentro da pasta Dados e dar o comando find... dentro dela. Mas como dentro da pasta Dados existem vários diretórios, para especificar todos os diretórios dentro dela, altere o inicio do comando de find Dados - para find . -[/color].
Por exemplo, se der um comando como o
cp -r Dados /destino a pasta dados será criada no destino. Se quer o conteúdo da pasta Dados, nesse caso, dentre várias as opções possiveis, a opção que se encaixa como uma luva a esse caso é entrar dentro da pasta dados (
cd Dados) e dentro da pasta Dados, para copiar seus diretórios para um um destino qualquer o comando seria
cp -r . /destino ou
cp -r * /destino. É essa a logica necessária ao seu problema.
Como não sei sua estrutura, posso apenas dar o comando e a lógica, vc deve adaptá-lo a sua necessidade. Se você falhar na adaptação, é por que não sabe exatamente o que está fazendo. É muito perigoso desenvolver algo e chegar a um resultado final desconhecendo todos os processos, é um erro brutal.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Explicando mais detalhadamente por que a pasta Dados foi criada em /media/MarcosNão sei onde está a pasta dados, então, supondo que estejá em /home/dados, o comande deverá ser rodado dentro da pasta home, uma pasta antes de Dados.
cd /home
find Dados/ -type d -exec mkdir -p /media/Marcos/{} \;traduzindo: Recriando o diretório Dados e seus subdiretórios em /media/Marcos/
Dessa forma a estrutura do pendrive a ser criada será /media/Marcos/Dados.
Agora sem saber sua estrutura de diretórios fica dificil advinhar, pois não sei nem se essa pasta Dados existe.
Após recriar as pastas, para transferir as imagens o comando seria:
cd /home
find Dados/ -name folder.jpg -type f -exec cp {} /media/Marcos/{} \;Então, para isso funcionar, as condições seriam:
A pasta que tem meus os dados se chama Dados e está dentro de /home. (/home/Dados).
Tenho um pendrive que esta montado dentro da pasta /media em um diretório com o nome de Marcos. (/media/Marcos)
Para mandar a pasta Dados suas subpastas, cada uma com seu folder.jpg, os comandos seriam:
cd /home
find Dados/ -type d -exec mkdir -p /media/Marcos/{} \;
find Dados/ -name folder.jpg -type f -exec cp {} /media/Marcos/{} \;
Eu acabei de fazer um teste com a minha pasta Imagens, jogando-a dentro da pasta recém criada com o comando: mkdir /home/raidicar/
teste.
Criada essa pasta de teste para realizar o teste, dei os comandos:
cd /home/raidicar
find Imagens/ -type d -exec mkdir -p /home/raidicar/teste/{} \;
find Imagens/ -name *.jpg -type f -exec cp {} /home/raidicar/teste/{} \;Dentro da pasta teste foi criada a pasta imagem com seus subdiretórios
e apenas as imagens .jpg foram transferidas as suas respectivas pastas. As imagens png, gif, etc não foram transferidas.
O resultado do comando
find teste -type d dado dentro de
/home/raidicar mostra minha estrutura de diretórios recém criados na pasta teste:
teste/Imagens
teste/Imagens/logos
teste/Imagens/1280x1024
teste/Imagens/ubuntu wallpapers
teste/Imagens/1440x900Vê que foi criada a pasta imagens dentro de teste e as subpastas estão no local correto? Assim como foi criado a pasta Dados dentro de /media/Marcos/
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
==========================================================================================
AGORA A PASTA IMAGENS NÃO SERÁ CRIADA, seguindo a mesma lógica, sua pasta Dados também não será criada.Agora jogo o
conteudo da pasta
Imagens na raiz da pasta
teste, os comandos são:
cd /home/raidicar/Imagens (Vê a diferença aqui, acesse a pasta)
find . -type d -exec mkdir -p /home/raidicar/teste/{} \; (
Vê a pequena difereça no inicio do comando, não especifico uma pasta, especifico o conteudo dessa pasta)
Traduzindo: recriar os diretórios da pasta atual em /home/raidicar/testes/
find . -name *.jpg -type f -exec cp {} /home/raidicar/teste/{} \; (
Novamente, como explicado acima. Agora estou trabalnando com as imagens)
Dessa forma o que seria criado na pasta teste seriam os diretórios dentro de Imagens e não a pasta Imagem.
Agora acesso a minha pasta de usuário com o comando
cd /home/raidicar e dou novamente o comando
find teste -type d.
O resultado é:
teste
teste/logos
teste/1280x1024
teste/ubuntu wallpapers
teste/1440x900
Como dei o
find + mkdir dentro da pasta Imagens, a mesma não foi criada, a estrutura foi criada a partir do seu conteúdo.
Para obter esse resultado o seu script seria com os comandos:
cd /home/Dados
find . -type d -exec mkdir -p /media/Marcos/{} \;
find . -name folder.jpg -type f -exec cp {} /media/Marcos/{} \;
O caminho /home/Dados é um exemplo. Agora não foi criada a pasta Dados dentro de /media/Marcos, mas sim, criado as pastas que estão
dentro de Dados em /media/Marcos.
=============================================================================================
Bom, é isso, os comandos funcionam, precisa saber como utiliza-los. Se algo não está saindo do jeito desejado é por que não está aplicando direito ou é por que ainda não "pegou" a lógica ou esta se perdendo na sua estrutura de diretórios. Então, se ainda tiver problemas, esqueça de tudo isso , dê uma reforçada em manipulação de arquivos e pastas e tente fazer isso funcionar depois, pois o problema está ai.
Abraço.