我怎样才能recursion地打印文件名称短于25个字符的文件列表?

我需要一行命令来满足下面的要求。

从根目录中search所有文件,只打印文件名长度小于25的文件名。

我想我们可以用下面的find命令来做:

find / -type f |xargs basename ....我不确定furthur命令。

我的GNU find支持这个,不确定它是否是标准查找的一部分。

 find / -type f -regextype posix-extended -regex '.*/.{1,24}$' 

或者,使用find | grep的。

 find / -type f | egrep '.*/.{1,24}$' 
 find / -type f|egrep "/[^/]{0,24}$" 

或者,如果您只想显示没有路径的文件名:

 find / -type f| egrep -o "/[^/]{0,24}$" | cut -c 2- 

使用Bash 4+

 shopt -s globstar shopt -s nullglob for file in **/* do file=${file##*/} if (( ${#file} < 25 ));then echo "$file"; fi done 

红宝石(1.9+)

 ruby -e 'Dir["**/*"].each {|x| puts x if File.basename(x).size < 25}' 

在快速提到一些手册后,我发现awk更加合适,易于理解。请参阅我提出的下面的解决方案。

 find / -type f|awk -F'/' '{print $NF}'| awk 'length($0) < 25' 

可能是有一些语法错误。请纠正我,如果我错了。