例如文件名是这样的:
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 最好、最简单的方法是什么?
和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)