我有数百个文件,我想从文件名中删除最后 7 个字符,但保留其扩展名。
旧名称:
abc_xyz12_4567.txt
abcde_xyz12_4567.txt
新名字:
abc_xyz.txt
abcde_xyz.txt
答案1
尝试
ls | awk -F. '{printf "mv %s %s.%s\n",$0,substr($1,1,length($1)-7),$2 ;}' | ksh
您可以使用
ls | awk -F. '{printf "mv %s %s.%s\n",$0,substr($1,1,length($1)-7),$2 ;}'
进行预览。
答案2
您可以使用改名(或者prename
在某些操作系统中):
rename 's/.{7}(\.txt)/$1/' abc*
答案3
与 GNU tar
:
touch abc_xyz12_4567.txt abcde_xyz12_4567.txt
tar --remove-files --xform='s/\(.*\).\{7\}\./\1./' -c ./* | tar -x
ls
输出
abcde_xyz.txt abc_xyz.txt
这将安全地完成这一切 - 事实上您甚至不需要该--remove-files
选项 - 您可以将untar
文件替换到不同的目录并验证文件名更改是否有效。也许像:
tar --xform... | tar -C ../test -x