在Linux中查找最长的文件名

我从我的根目录search最长的文件名到最底部。

我编写了一个C程序,将计算最长的文件名的长度和名称。

但是,我不能让shell将文件名的长列表redirect到我的程序接收它的标准input。

这是我做的:

ls -Rp | grep -v / | grep -v "Permission denied" | ./home/user/findlongest 

findlongest已被编译,我检查了我的一个IDE,以确保它正常工作。 目前没有发现运行时错误。

如何通过redirect标准input将文件名列表添加到我的“findlongest”代码中?

关于什么

 find / -type f | /home/user/findlongest 

它将以绝对路径列出来自根的所有文件,并只列出您有权列出的文件。

尝试这个:

 find / -type f -printf '%f\n' 2>/dev/null | /home/user/findlongest 

2>/dev/null将放弃写入到stderr所有数据(这是您看到'Permission denied'消息来自的地方)。

或者从下面删除你的应用程序的依赖(从这里 ):

 find / -type f -printf '%f\n' 2>/dev/null | \ awk 'length > max_length { max_length = length; longest_line = $0 } END { print length(longest_line) " " longest_line }' 

根据命令:

 find -exec basename '{}' ';' 

它只递归地打印从你所在目录开始的所有文件的文件名:所有的文件名。

这个bash行将提供最长的文件名和字符数:

请注意,所涉及的循环会使进程变慢。

 for i in $(find -exec basename '{}' ';'); do printf $i" " && echo -e -n $i | wc -c; done | sort -nk 2 | tail -1 

按部分:

打印文件的名称,后跟一个空格:

 printf $i" " 

打印此文件的字符数:

 echo -e -n $i | wc -c 

按字符数排序输出,并采取最长的一个(最新):

 sort -nk 2 | tail -1 

所有这些都在for循环中逐行处理。

句子也可以通过以下方式更改:

 for i in $(find -type f -printf '%f\n'); 

正如@ Attie的答案所述