Substituição para o comando xcopy do DOS

6

No DOS, há o comando

xcopy /s *.mp3 ..\TEMP2

Como posso fazer isso no Ubuntu?

cp -r *.mp3 ../TEMP2

copiará recursivamente todos os arquivos mp3, infelizmente sem o caminho devido ao filtro *.mp3 .

cp -r *.* ../TEMP2

copia o caminho, mas não pode ser limitado a arquivos mp3

Eu dei uma olhada no rsync, mas não entendi.

    
por sleepless 30.08.2011 / 17:38

2 respostas

8

O poder das ferramentas no Ubuntu é que você pode combiná-las. O próximo comando localiza todos os arquivos .mp3 no diretório atual e em seus subdiretórios e os copia para a pasta ../TEMP2/ , preservando os caminhos:

find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
  • find -iname '*.mp3' - localiza todos os arquivos que terminam com .mp3 (insensibilidade a maiúsculas e minúsculas) e
    • -exec - executa um comando para cada partida:
      • install -D {} ../TEMP2/{} - copia o arquivo correspondente para ../TEMP/ preservando o caminho. ( {} é substituído pelo caminho, incluindo nome do arquivo)
    • \; - termina o comando -exec

Se você deseja obter o progresso, adicione -ls ("list") ao comando antes de -exec . Pode ser colocado depois de \; também, mas nesse caso o nome é mostrado depois de ser copiado. Exemplos:

find -iname '*.mp3' -ls -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \; -ls
    
por Lekensteyn 30.08.2011 / 17:49
3

Existem várias opções, mas nenhuma é realmente simples, receio…

rsync

rsync -r --include="*/" --include="*.mp3" --exclude="*" --prune-empty-dirs . ../TEMP2

Isso informa para excluir todos os arquivos ( exclude="*" ), mas para examinar todos os diretórios ( include="*/" ) e incluir todos os arquivos mp3 ( include="*.mp3" ). Se você não deseja copiar diretórios que não contenham arquivos mp3, a opção --prune-empty-dirs é necessária.

zip

zip -R archive.zip "*.mp3"
unzip -d ../TEMP2 archive.zip && rm archive.zip

O primeiro comando cria um arquivo com todos os arquivos mp3, o segundo descompacta o conteúdo para o diretório de destino e exclui o arquivo se ele for bem-sucedido.

encontrar

find . -iname "*.mp3" -exec install -D {} ../TEMP2/{} ";"

Isto irá encontrar todos os arquivos mp3 e copiá-los para o caminho correspondente no diretório ../TEMP2 , depois de criar a estrutura de diretórios primeiro ( install -D ).

copia tudo e elimina o resto

Isso só faz sentido se você tiver apenas alguns arquivos que você não deseja copiar:

cp -r * ../TEMP2
find ../TEMP2 -type f \! -iname '*.mp3' -delete

Isso copia tudo e, em seguida, exclui todos os arquivos que não são arquivos mp3

    
por Marcel Stimberg 30.08.2011 / 21:12