Если под "извлекать и удалять их расширения" вы имеете в виду переименование их по ходу дела, этого можно достичь.
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