繁体   English   中英

ls在目录中的文件列表

[英]ls in a directory for a list of files

我有一个C代码库,所有代码都位于同一目录中。 我想查找具有相同名称的代码文件的所有头文件。

现在,我有以下命令:

ls *.h | sed s/.h/.c/

这将返回我要搜索的文件名的“列表”。 如何将此列表传递给另一个命令,以便可以看到哪些头文件的代码文件具有相同的名称?

没有任何外部命令:

$ for i in *.h
> do
>   [ -f  ${i/.h/.c} ] && echo $i
> done

第一行循环遍历每个文件。

第三行是测试构造。 test-f标志(又名man [ )检查文件是否存在。 如果是这样,它将返回0 (在shell中被视为true)。 如果前一行成功返回,则&&仅在以下命令有效时运行。

$ {i / .h / .c}是就地内嵌式正则表达式替换,因此测试的文件是.h对应的.c。

您可以使用xargs来转换其输入:

a
b
c

到参数列表:

a b c

因此,应打印“ abc”:

echo -e "a\nb\nc" | xargs echo
ls `ls *.h|sed s/.h/.c/` 2>/dev/null

应该可以

ls *.h | sed s/.h/.c/ | xargs ls 2>/dev/null

命令的其余部分使用新的* .c文件名再次运行ls ls会抱怨每个不存在的文件,因此我们将stderr重定向到无处。

没有2>/dev/null示例:

$ ls
a.c a.h b.c c.c d.h
$ ls *.h | sed s/.h/.c/ | xargs ls
ls: d.c: No such file or directory
a.c
ls -1 *.c* *.h*|awk -F. '{a[$1]++}END{for(i in a){if(a[i]==2)print i".hh"} }'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM