Aqui tienes:
for file in /home/user/temps/*/thumb.png; do new_file=${file/temps/new_folder}; cp "$file" "${new_file/\/thumb/}"; done;
editar:
La sabiduría canónica, por cierto, es que usar find
esto es una mala idea: simplemente usar la expansión de shell es mucho más confiable. Además, esto suponebash
, pero supongo que es una suposición segura :)
editar 2:
para mayor claridad, lo desglosaré:
# 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;
Los detalles sobre la ${var/Pattern/Replacement}
construcción se pueden encontrar aquí .
las comillas en la cp
línea son importantes para manejar espacios y líneas nuevas, etc. en los nombres de archivo.