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

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

É possível usar apenas a linha de comando para usar algo como o comando cpor rsyncpara rastrear um disco rígido em busca apenas de 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 quero fazer backups de fotos e vídeos que tenho neles, mas eles estão espalhados, na melhor das hipóteses, por milhares de pastas e prefiro que o computador faça a maior parte do trabalho pesado para mim, se pelo menos tudo possível, mas ainda estou aprendendo sobre a linha de comando e suas habilidades impressionantes.

Responder1

Você pode usar findpara procurar arquivos de seu interesse, ou seja:

find /mnt/hd1 -name \*.jpg

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

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

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

Espero que ajude :)

Responder2

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. Dessa forma você também pode saber a origem do arquivo.

Além disso, eu mudaria um pouco o que foi dito acima, caso você tenha nomes de arquivos duplicados, caso suspeite disso em seu ambiente. Você precisaria de alguma verificação de erros em seu script.

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

ou seja, se um arquivo estiver aqui

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

Isso copiaria apenas para um diretório/backup

Para preservar, você poderia fazer

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

Mas então 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 observar os scripts e garantir que tudo esteja bem antes de realmente executar os comandos. Eu queimei algumas vezes executando o comando com ...erm...resultados inesperados :)

Além disso, ter o roteiro também lhe dá um registro do que você fará.

informação relacionada