我试图列出名称不超过 250 个字符的所有文件(包括它所属的目录,来自我的命令所在的相对路径)。
我看过类似的帖子 ,但这只会递归地列出文件。
有关如何修改脚本以仅显示名称不超过 250 个字符(包括相对路径)的文件的任何想法吗?
答案1
使用 GNU find
:
find . -regextype posix-extended ! -regex '.{253,}' ! -type d
(打印./
不包含在 250 计数中的前缀)。
和zsh
:
setopt extendedglob # if not already in your ~/.zshrc
printf '%s\n' **/*~?(#c251,)(D^/)
这是所有递归路径 ( **/*
) 包括隐藏路径 ( (D)
),但不是 ( ^
) 类型的路径目录( /
),除了 ( ~
) 与 匹配的?(#c251,)
,即包含 251 个或更多字符的。
POSIXly:
find . ! -path "$(printf %253s | tr ' ' '?')*" ! -type d
(请注意,Unix 上没有任何东西可以保证文件名由有效字符组成。除了一个之外zsh
,这些解决方案还可能报告路径中包含不构成有效字符的字节序列的文件(添加-path '*'
可能有助于排除这些文件)。如果你想匹配字节与数量相反人物C
在您的语言环境中,您可以使用)将语言环境修复为export LC_ALL=C
。
答案2
POSIXly:
$ find . -type f -exec sh -c '
for f do
[ "${#f}" -le 252 ] &&
printf "%s\n" "$f"
done
' sh {} +
POSIX 定义${#参数}作为值参数的字符长度,但行为在某些 shell 中可能会有所不同。bash
, zsh
,yash
计数字符,dash
计数字节。ksh93
有一个随机错误取决于其实现。