Если под "извлекать и удалять их расширения" вы имеете в виду переименование их по ходу дела, этого можно достичь.
find f1 -path "*/aaa/*" -type f -exec bash -c 'mv -i -- "$0" "${0%.*}"' {} \;
Или просто напечатать файлы без их расширения:
find f1 -path "*/aaa/*" -type f -exec bash -c 'echo "${0%.*}"' {} \;
Вместо того, чтобы grep find , вы должны использовать встроенные возможности фильтрации, чтобы найти подходящие файлы. В противном случае вы получите ложные срабатывания для файлов, включая строку aaa .
Подстановки имен файлов всегда должны заключаться в кавычки, чтобы предотвратить расширение пробелов или шаблонов оболочки.
Более того, выходные данные find не должны передаваться в while пока вы не разметите результат как null. Если вы на самом деле просто хотите «что-то сделать» с каждым файлом, while в этом случае нет необходимости. Тот же эффект может быть достигнут с помощью опции -exec .
Если вам нужно find … | while то время , тогда это безопаснее (не забудьте процитировать имя файла):
find … -print0 | while IFS= read -r -d '' file; do command "$file"; done