
次のディレクトリツリーがあるとします。
/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)を印刷します。