查找名称短于 7 个字符的文件,并将其重命名为 .new 文件名
ls | grep -E "^.{,6}$"| xargs -I {} -t mv {} .new
没有工作
答案1
使用:find
-regex
...并假设文件位于当前目录中(给出最初的问题)
find -regextype egrep -regex '^.{1,6}$' -exec mv {} .new
中的正则表达式find
接受各种语法,因此明确说明是个好主意。此外,如果您想要扫描多个目录,请注意与 不同name
,-regex
它适用于文件的整个路径,因此适当的修补模式将是'.*/[^\]{1,6}'
答案2
考虑到名称为 1-6 个字符的文件不是名称为 7 个或更多字符的文件:
mv !(???????*) .new
(???????*
匹配 7 个字符或更多字符的名称,并否定!()
它)。这个答案假设您只有一个可能的匹配项(您的问题似乎以目前的形式暗示了这一点)。
如果有多个匹配项,则循环使用该模式for
:
for f in !(???????*); do ... ; done
答案3
使用 for 循环和通配符模式,如下所示:for file in !(???????*); do mv $file $file.new; done
感谢 xenoid 提供正确的 glob 模式。