find: как игнорировать путь?

Я должен найти некоторые типы файлов в каталоге, и это подкаталоги, и мне нужно распечатать только имена файлов. Итак, вот основная команда:
find -type f -name "*.c"

Теперь, как я мог вырезать пути из каждого результата? (это можно сделать с помощью awk, но я надеюсь, что есть более простой способ сделать это).

    GNU find поддерживает предикат -printf , который поддерживает спецификатор формата %f для вывода на имя файла.

     find -type f -name "*.c" -printf '%f\n' 

    Использование awk не так сложно:

     find . -name '*.c' -type f | awk -F/ '{print $NF}' 

    Или sed :

     find . -name '*.c' -type f | sed 's|.*/||' 

    (при условии, что имена файлов не содержат символов новой строки), и это будет работать с любой реализацией find .

    Вы можете использовать программу basename для получения имени файла:

     find . -type f -name \*.c -exec basename {} + 

    Это работает на find s, у которых -printf расширения GNU -printf .

    Поиск GNU знает -printf . Если вы также находите подкаталоги, то имена файлов могут возникать несколько раз (в общем)!

    Вам нужно -printf "%p\n" или -printf "%f\n" .