我有一堆文件被" mv -backup = t source destination"复制。所以这些文件格式为*.*.~[0-9]~
例如,
some_file_name.pdf.~1~
some_file_name.pdf.~2~
another_file_name.docx.~1~
another_file_name.docx.~2~
现在,我想重命名所有这些文件,以便备份分机号码在实际扩展名之前。像
some_file_name_1.pdf
some_file_name_2.pdf
another_file_name_1.docx
another_file_name_2.docx
有没有办法在Unix中使用shell? 任何想法将不胜感激。提前谢谢。
答案 0 :(得分:1)
使用BASH正则表达式指令可以执行以下操作:
for f in *~; do
[[ $f =~ ^(.+)\.([^.]+)\.~([0-9]+)~$ ]] &&
echo mv "$f" "${BASH_REMATCH[1]}_${BASH_REMATCH[3]}.${BASH_REMATCH[2]}"
done
<强>输出:强>
mv CR_71050_5.3.17.pdf.~1~ CR_71050_5.3.17_1.pdf
mv another_file_name.docx.~1~ another_file_name_1.docx
mv another_file_name.docx.~2~ another_file_name_2.docx
mv some_file_name.pdf.~1~ some_file_name_1.pdf
mv some_file_name.pdf.~2~ some_file_name_2.pdf
一旦您满意,就可以在echo
之前删除mv
答案 1 :(得分:0)
尝试:
awk -F~ '{ split($1,splt,".");system("mv "$0" "splt[1]"_"$2"."splt[2]) }'
我们实际上是在〜上拆分文件名,然后使用awks split函数进一步拆分文本,然后将其传递给系统函数以执行mv命令。
答案 2 :(得分:0)
您可以使用重命名(它可以作为Debian软件包使用)。
$ ls
file.pdf.~1~ file.pdf.~10~ file.pdf.~2~ file.pdf.~3~ file.pdf.~9~
$ rename 's/.pdf.~([0-9]+)~$/$1.pdf/' *.pdf.~*~
$ ls
file10.pdf file1.pdf file2.pdf file3.pdf file9.pdf