Aqui você vai:
for file in /home/user/temps/*/thumb.png; do new_file=${file/temps/new_folder}; cp "$file" "${new_file/\/thumb/}"; done;
edit:
a sabedoria canônica, a propósito, é que usar find
para isso é uma má idéia - simplesmente usar a expansão de shell é muito mais confiável. Além disso, isso pressupõe bash
, mas acho que é uma suposição segura:)
edit 2:
para maior clareza, vou dividi-lo:
# shell-expansion to loop specified files
for file in /home/user/temps/*/thumb.png; do
# replace 'temps' with 'new_folder' in the path
# '/home/temps/abc/thumb.png' becomes '/home/new_folder/abc/thumb.png'
new_file=${file/temps/new_folder};
# drop '/thumb' from the path
# '/home/new_folder/abc/thumb.png' becomes '/home/new_folder/abc.png'
cp "$file" "${new_file/\/thumb/}";
done;
Detalhes sobre a construção ${var/Pattern/Replacement}
podem ser encontrados aqui .
as aspas na linha cp
são importantes para manipular espaços e novas linhas, etc. em nomes de arquivos.