A linha de comando cp ou rsync para rastrear a unidade buscando apenas tipos específicos de arquivos e colocá-los em algum lugar?

2

É possível usar apenas a linha de comando para usar algo como o comando cp ou rsync para rastrear um disco rígido buscando apenas arquivos de imagem / vídeo? E talvez no processo de copiá-los para outro local, preservando os nomes / caminhos das pastas no novo local?

Eu tenho alguns discos rígidos antigos que eu quero fazer backups de fotos e vídeos que eu tenho sobre eles, mas eles estão espalhados na melhor das hipóteses através de milhares de pastas e eu prefiro que o computador faça a maior parte do trabalho duro para mim , se for possível, mas ainda estou aprendendo sobre a linha de comando e suas impressionantes habilidades.

    
por chris 13.08.2014 / 22:45

2 respostas

4

Você pode usar find para procurar por arquivos de seu interesse, por exemplo:

find /mnt/hd1 -name \*.jpg

irá procurar por arquivos jpg (bem, para arquivos com extensão .jpg) no diretório / mnt / hd1. Se você quiser simplesmente copiar esses arquivos em algum lugar, você pode:

find /mnt/hd1 -name \*.jpg -exec cp {} /mnt/dest

Isso executará o comando cp para cada arquivo que encontrar no diretório / mnt / dest.

Espero que ajude:)

    
por 13.08.2014 / 23:16
2

Outra possibilidade, se você não quiser automatizá-lo em um script, é usar o comando find para criar um script bash. Em seguida, execute o script bash. Desta forma, você pode dizer a origem do arquivo também.

Além disso, eu mudaria o texto acima apenas para o caso de você ter nomes de arquivos duplicados, caso suspeite disso em seu ambiente. Você precisaria de alguma verificação de erros no seu script.

Você também deseja preservar o caminho do diretório?

i.e. se um arquivo está aqui

/source/a/b/c/d/e.jpg

Você quer copiá-lo para

/dest/a/b/c/d/e.jpg?

ou

/dest/e.jpg?

Então, um exemplo poderia ser

find /source -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/}' > copy.sh

Isto iria copiar apenas para um diretório / backup

Para preservar, você pode fazer

(cd /source; find . -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/"$1}') > copy.sh

Mas você gostaria de criar todos os diretórios primeiro

(cd /source; find . -type d -print | awk '{print "mkdir -p /backup/"$1}' > mkdir.sh

O poder de fazer isso é que você também pode ver os scripts e ter certeza de que tudo fica bem antes de executar os comandos. Eu gravei algumas vezes executando o comando com ... erm ... resultados inesperados :)

Além disso, ter o script também fornece um registro do que você fará.

    
por 14.08.2014 / 00:11