findコマンド:パス名を無視する方法は?

findコマンド:パス名を無視する方法は?

ディレクトリとサブディレクトリで特定の種類のファイルを見つけて、ファイル名を印刷する必要があります。これが主なコマンドです。
find -type f -name "*.c"

では、各結果からパスをどのようにブロックできますか? (おそらくawkを使ってこれを行うことができますが、より簡単に行う方法があることを願っています。)

答え1

GNU find は、ファイル名の書式指定子出力を-printfサポートする述語をサポートします。%f

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

答え2

使用は複雑ではありませんawk

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

またはsed:

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

(ファイルパスに改行文字が含まれていないと仮定します)これはすべてのfind実装で機能します。

そしてzsh

print -rC1 -- **/*.c(N.:t)

答え3

このbasenameプログラムを使用してファイル名を取得できます。

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

これはfindGNU拡張を持たないシステムで機能します-printf

答え4

GNU検索は-printf。サブディレクトリも検索すると、ファイル名が(通常)複数回表示されることがあります。

あなたは-printf "%p\n"または-printf "%f\n"

関連情報