find
+ bash
:
find $folder -maxdepth 1 -type f -name "*-[0-9].jpg" -exec \
bash -c 'cp "$1" "${1:0:-4}-mini.jpg"' _ {} \;
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
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 {} +
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