cópia de arquivo recursiva

2

Como posso usar os comandos do terminal / Linux para pesquisar recursivamente uma unidade por imagens (jpg) e copiá-las para a minha área de trabalho, renomeando todos os arquivos encontrados usando números. Portanto, a primeira vez que encontrar deve ser copiada para a área de trabalho como 1.jpg, o segundo arquivo deve ser copiado como 2.jpg e 50.000 arquivos devem ser copiados como 50000.jpg e assim por diante.

    
por oshirowanen 28.12.2010 / 17:53

2 respostas

2
n=1; for file in $(find /media/foo/ -name '*.jpg'); do cp $file ~/Desktop/$n.jpg; n=$((n + 1)); done
    
por 28.12.2010 / 19:04
0

Existem dois problemas aqui.

  1. Encontrando um conjunto de arquivos jpeg.
  2. Copiando um conjunto de arquivos para um diretório de destino com nomes numerados sequenciais.

Para o primeiro problema, a solução óbvia e correta é find , o que, felizmente, torna isso muito fácil.

find / -type f -iregex '.*\.jpe?g$'

É claro que isso poderia ser mais sofisticado se você quisesse digite detecção com file em vez de por extensão.

O segundo problema é a cópia sequencial. Um simples contador é tudo o que é necessário para que isso funcione.

n=1
cp "$source" "$dest/$n.jpeg"
n=$((n + 1 ))

Fazendo isso dentro de um loop, é claro, onde $source muda em cada iteração.

Colocando tudo junto

#!/usr/bin/env bash

usage() {
    echo "$0: usage: $0 [source directory] [destination directory]"
}

if [ ${#@} -ne 2 ] ; then
    usage
    exit
fi

scan="$1"
dest="$2"

if [ ! -d "$scan" ] ; then
    usage
    printf "\nspecified source does not exist or is not a directory\n"
    exit
fi

if [ ! -d "$dest" ] ; then
    usage
    printf "\nspecified destination does not exist or is not a directory\n"
    exit
fi

n=1
while read -r -d $'
find / -type f -iregex '.*\.jpe?g$'
' source ; do cp "$source" "$dest/$n.jpeg" n=$((n + 1 )) done < <(find "$scan" -type f -regextype posix-extended -iregex '.*\.jpe?g$' -print0)

Nota de portabilidade: -regextype é uma extensão do GNU find; sem ele, -iregex pode não corresponder a nomes de arquivos contendo novas linhas.

    
por 20.01.2011 / 20:30