列出子目录及其父目录中的所有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 文件
  • awk
    • BEGIN{FS="/"}将使用 / 作为字段分隔符
    • {printf "%s,%s\n",$0,$3;}并打印整行($0)和文件($3)

相关内容