基于名称长度查找Linux文件和目录并输出完整路径
解决文件名/目录名过长(完整路径输出)的问题
你的命令之所以只能得到文件名,是因为basename把路径部分给去掉了。其实我们可以直接在find的处理流程里保留完整路径,同时判断最后一段(文件名/目录名)的长度,下面给你几个实用的方法:
方法1:用awk配合find(简单直观)
先让find输出所有文件和目录的完整路径,再用awk提取文件名部分判断长度,符合条件就输出完整路径:
find . -type f -o -type d | awk '{ filename = $0 sub(/.*\//, "", filename) # 从完整路径中提取最后一段(文件名/目录名) if (length(filename) > 20) { # 这里的20替换成你需要的x值 print $0 } }'
方法2:用find的-exec直接处理(高效无额外管道)
通过sh -c在find的-exec里处理每个文件/目录,既保留完整路径,又能判断文件名长度:
find . -exec sh -c ' filename=$(basename "$1") if [ ${#filename} -gt 20 ]; then # 20替换为你的阈值x echo "$1" fi ' sh {} \;
方法3:用find的正则匹配(最简洁)
利用正则表达式匹配完整路径中“最后一段长度≥20”的情况,一步到位:
find . -regex '.*/[^/]\{20,\}'
这里的\{20,\}表示匹配至少20个非斜杠字符(也就是文件名/目录名部分长度≥20),把20改成你需要的x值即可。
测试效果
针对你给出的文件夹结构,这些命令都会输出以下完整路径:
./longdirectorywithsillylengththatyouwouldntnormallyhave./longdirectorywithsillylengththatyouwouldntnormallyhave/asdasdads9ads9asd9asd89asdh9asd9asdh9asd./shrtdir/nowthisisalongfile0000000000000000000000000
内容的提问来源于stack exchange,提问作者user5712518
相关产品推荐
相关产品推荐

