Ну вот:
for file in /home/user/temps/*/thumb.png; do new_file=${file/temps/new_folder}; cp "$file" "${new_file/\/thumb/}"; done;
редактировать:
Кстати, каноническая мудрость заключается в том, что использовать find
для этого плохая идея - просто использование расширения оболочки гораздо надежнее. Кроме того, это предполагает bash
, но я думаю, что это безопасное предположение :)
редактировать 2:
для ясности я разобью это
# 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;
подробности о ${var/Pattern/Replacement}
конструкции можно найти здесь .
кавычки в cp
строке важны для обработки пробелов, новых строк и т. д. в именах файлов.