ディレクトリとサブディレクトリで特定の種類のファイルを見つけて、ファイル名を印刷する必要があります。これが主なコマンドです。
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 {} +
これはfind
GNU拡張を持たないシステムで機能します-printf
。
答え4
GNU検索は-printf
。サブディレクトリも検索すると、ファイル名が(通常)複数回表示されることがあります。
あなたは-printf "%p\n"
または-printf "%f\n"
。