サブディレクトリと親ディレクトリのすべてのcファイルを一覧表示する

サブディレクトリと親ディレクトリのすべてのcファイルを一覧表示する

次のディレクトリツリーがあるとします。

/home/xen/p.c
/home/dan/t.c
/home/jhon/l.c
...
etc (many more users) 

次のようにカンマで区切られた(ユーザー名、cファイルのフルパス)リストを取得する必要があります。

xen,/home/xen/p.c
dan,/home/dan/t.c
...
etc

コマンドラインでこれを行うにはどうすればよいですか?

答え1

GNUfind を使用して出力形式を指定できます。ファイルがユーザー自身によって生成されたと仮定すると、コマンドは次のようになります。

find /home/ -maxdepth 2 -type f -name '*.c' -printf '%u,%p\n'

man find詳しくはこちらprintf

以下も使用できます。

find /home/ -maxdepth 2 -type f -name '*.c' -exec bash -c 'n="${1%/*}"; n="${n##*/}"; echo "$n",$1' _ {} \;

答え2

for i in /home/*/*.c
do
echo $i|awk 'BEGIN{FS="/"}{print $3, ",", $0;}'
done

これが役に立ちます。

またはより短い形式で

 echo /home/*/*.c | awk 'BEGIN{FS="/";RS=" "}{printf "%s,%s\n",$3,$0;}'

どこ

  • echo /home/*/*.cすべての.cファイルを拡張します(権限がある場合)。
  • アッ
    • BEGIN{FS="/"}/ をフィールド区切り文字として使用します。
    • {printf "%s,%s\n",$0,$3;}行全体($0)とファイル($3)を印刷します。

関連情報