Copie os arquivos sob o nome modificado

3

Eu tenho que encontrar todos os arquivos em um diretório que termine com o número (esta parte está OK) e copie-os sob um nome modificado (não sei como fazer essa parte). Tipicamente:

find $folder -maxdepth 1 -type f -name '*-[0-9]\.jpg'

Copie todos os arquivos para o mesmo diretório, nomeando-os $originalName-mini.jpg

    
por MarvinLeRouge 15.06.2018 / 11:27

3 respostas

2
Solução

find + bash :

find $folder -maxdepth 1 -type f -name "*-[0-9].jpg" -exec \
bash -c 'cp "$1" "${1:0:-4}-mini.jpg"' _ {} \;
    
por 15.06.2018 / 11:36
1

Você realmente não precisa de find , já que está procurando apenas em um único diretório, apenas um loop de shell fará o trabalho. Você também não precisa escapar do ponto em um padrão de globalização de nomes de arquivo.

for pathname in "$folder"/*-[0-9].jpg; do
    [ -f "$pathname" ] && cp "$pathname" "${pathname%-[0-9].jpg}-mini.jpg"
done

A substituição do parâmetro ${variable%pattern} remove pattern do final do valor de variable .

O teste -f garante que estamos lidando com um arquivo regular (ou um link simbólico para um) e não com um diretório com nome errado.

Usando find para fazer o mesmo:

find "$folder" -maxdepth 1 -type f -name '*-[0-9].jpg' -exec sh -c '
    for pathname do
        cp "$pathname" "${pathname%-[0-9].jpg}-mini.jpg"
    done' sh {} +
    
por 21.06.2018 / 20:21
0

Uma maneira de fazer isso é anexar o seguinte comando ao seu script. Suponha que você tenha o nome original em $originalName , você pode usar

cp $originalName $(basename $originalName .jpg)-mini.jpg
    
por 15.06.2018 / 11:37

Tags