1

我需要确定给定目录中是否有任何目录名称> 31 个字符(即在该根目录下查看)。

我知道我可以使用类似的东西find /path/to/root/dir -type d >> dirnames.txt

这会给我一个完整路径的文本文件。

我需要的是获取每个目录名称中的实际字符数。不确定使用 sed 或 awk 解析上述结果是否有意义。寻找有关如何完成此任务的想法/想法/建议/提示。谢谢!

4

3 回答 3

2

这个简短的脚本一次性完成,即找到所有目录名称,然后输出长度大于 31 个字符的任何目录名称(以及它们的字符长度):

for d in `find  /path/to/root/dir -type d -exec basename {} \;` ; do
  len=$(echo $d | wc -c)
  if [ $len -gt 31 ] ; then
    echo "$d = $len characters"
  fi
done
于 2012-04-30T17:59:50.657 回答
0

尝试这个

 find . -type d -exec bash -c '[ $(wc -c <<<"${1##*/}") -gt 32 ] && echo "${1}"' -- {} \; 2>/dev/null

我认为是次要的一个错误是,它每次都会将目录名称长度多计 1。

如果你想要的是整个路径而不是最后一个路径组件,那么使用这个:

find . -type d | sed -e '/.\{32,\}/!d'

此版本也有一个错误,但仅限于文件名嵌入换行符时。

两个命令的输出都是符合条件的文件名列表。从那里计算每个人的长度是微不足道的。

于 2012-04-30T18:20:40.623 回答
0

使用您的findcmd 创建的 dirnames.txt 文件,您可以按路径名的长度对数据进行排序,即

 awk '{print length($0) "\t" $0}' dirnames.txt | sort +0nr -1 > dirNamesWithSize.txt

这将在文件顶部显示最长的路径名(基于长度的值)。

我希望这有帮助。

于 2012-04-30T17:53:08.043 回答