重命名文件,保持前 10 个字符不变

Pla*_*ato 2 freebsd rename

例如文件名是这样的:

Order21039 Internal Document.doc
Order33920 New Order.doc
Order39307 Exam.doc
.
.
.
Run Code Online (Sandbox Code Playgroud)

我想保留前十个字符并附加另一个文本,例如:

Order21039.test.doc
Order33920.test.doc
.
.
.
Run Code Online (Sandbox Code Playgroud)

FreeBSD 最好、最简单的方法是什么?

Sté*_*las 5

zsh

autoload zmv # best in ~/.zshrc
zmv -n '(?(#c10))*.doc' '$1.test.doc'
Run Code Online (Sandbox Code Playgroud)

-n高兴时删除)。

您可以将其更改为:

zmv -n '(Order<->)*.doc' '$1.test.doc'
Run Code Online (Sandbox Code Playgroud)

匹配Order<anydecimalnumber>而不只是 10 个字符。

重命名后perl

PERL_UNICODE=LADS rename -n 's|^\./.{10}\K.*\.doc\z|.test.doc\z|s' ./*.doc
Run Code Online (Sandbox Code Playgroud)

(请注意,与 相反zmv,它不会防止多个文件映射到同一文件)

如果您没有这些,可以使用 FreeBSD 等类似 POSIX 的 shell /bin/sh

for file in ??????????*.doc; do
  newfile=${file%"${file#??????????}"}.test.doc
  echo mv -i -- "$file" "$newfile"
done
Run Code Online (Sandbox Code Playgroud)

echo高兴时删除)。

对于任何类似 Bourne 的 shell:

for file in ??????????*.doc; do
  newfile=`expr " $file" : ' \(.\{10\}\)'`.test.doc
  echo mv -i -- "$file" "$newfile"
done
Run Code Online (Sandbox Code Playgroud)