Copie todas as imagens no sistema para uma pasta

0

Estou tentando criar um script bash, que irá procurar no sistema por imagens jpg, jpeg, png, gif e copiá-las para um novo local. Mas estou tendo dificuldade em descobrir como fazer isso.

Isso é o que eu tenho até agora

#!/bin/bash
STRING="Copy system images \n"
echo $STRING

# settings
$LOCATION = ~/backup/images/$(date)
$FILETYPE = jpg, jpeg, png, gif

# in PHP
# preg_replace("/[^, ]+/", "*.$0", $input_lines);
# bash?? filetype should be *.jpg, *.jpeg, *.png, *.png

# find all images defined in FILETYPE
find ~/ -type f -iname $FILETYPE > images.txt 
&& echo "Number of images loccated: " 
&& wc -l images.txt

# read every line (image path), and copy to new location.
&& while read line; do cp $line ~/backup/$line; done < images.txt
&& rm images.txt

Eu sei, pode ser um pouco exagerado. Mas e script automatizado seria ótimo!

Como você pode ver, eu não sei como sed, preg_replace o $FILETYPE . E o uso excessivo de && parece não estar certo?

    
por Adam 29.06.2016 / 09:36

1 resposta

7

Para localizar todos os arquivos no diretório base com as extensões jpg , jpeg , png ou gif e copiá-los para ~/backup , tente:

cd
find . -regex '.*\(jpg\|jpeg\|png\|gif\)' \! -path './backup/*' -exec echo cp -t backup {} +

Como funciona

  • cd

    Isso faz com que o diretório inicial, ~/ , seja o mesmo do diretório atual, ./ .

  • find .

    Procure por arquivos no diretório atual

  • -regex '.*\(jpg\|jpeg\|png\|gif\)'

    Restrinja os resultados a arquivos cujos nomes terminam com jpg , jpeg , png ou gif .

  • \! -path './backup/*'

    Omitir arquivos que já estão no diretório de backup.

    Note que, enquanto -regex espera uma expressão regular como argumento, -path espera uma glob . Estas são duas formas muito diferentes que obedecem a regras muito diferentes.

  • -exec echo cp -t backup {} +

    Mova os arquivos encontrados para o diretório de backup.

por John1024 29.06.2016 / 09:59