小智 9
据我所知,没有专门执行此操作的命令,但您可以利用 shell glob 模式:
cp /source/????????????????* /dest
Run Code Online (Sandbox Code Playgroud)
星号前面有16 个问号(你说你想要“超过 15 个字符”,意思是“至少 16 个”)。
以下是对我当前答案的警告:
.)开头的文件)/source. 它只会为每个文件名长度大于 15 个字符的目录发出警告。如果您想递归地复制下面的所有内容/source并保持层次结构,那么该答案将更加复杂。您可以制作包含 16 个或更多字符的图案并复制这些文件。
一种简单(但不优雅)的方法,使用 16 个?字符,每个字符匹配任何单个字符:
for n in /source/????????????????*;do [ -f "$n" ] && cp "$n" /dest/; done
Run Code Online (Sandbox Code Playgroud)
在 16th 之后?,用于*匹配任意数量的字符。该模式可能并不真正匹配任何内容,因此-f仍需要进行测试以确保它是一个文件。
该?????????????????????解决方案是好的,除非你和我一样,不能指望上述8。在这种情况下,您可以使用find:
find . -maxdepth 1 -regextype posix-egrep -regex '.{17,}' -exec cp -t /dest {} +
Run Code Online (Sandbox Code Playgroud)
17应该用于考虑之前的./.-regextype posix-egrep需要允许大括号{}模式。默认的正则表达式类型find是emacs,它不允许这样做。cp参数(-t选项)放置,以便将所有输出{} +视为源。