假设我有一个目录树如下:
/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 文件- awk
BEGIN{FS="/"}
将使用 / 作为字段分隔符{printf "%s,%s\n",$0,$3;}
并打印整行($0)和文件($3)