van*_*van 19 linux bash rename file-rename
我想批目录中,这样前面的数字和连字符从文件名剥离重命名多个文件.
Old file name: 2904495-XXX_01_xxxx_20130730235001_00000000.NEW
New file name:         XXX_01_xxxx_20130730235001_00000000.NEW
如何使用linux命令执行此操作?
fed*_*qui 40
这应该是:
rename 's/^[0-9]*-//;' *
它从块的开头[0-9](即数字)开始多次,然后是连字符-并从文件名中删除它.
如果rename不在您的机器中,您可以使用循环并mv:
mv "$f" "${f#[0-9]*-}"
$ ls
23-aa  hello aaa23-aa
$ rename 's/^[0-9]*-//;' *
$ ls
aa  hello aaa23-aa
要么:
$ ls
23-a  aa23-a  hello
$ for f in *;
> do
>   mv "$f" "${f#[0-9]*-}"
> done
$ ls
a  aa23-a  hello
小智 19
我认为如果你执行以下命令,这个命令会更好:
ls * | sed -e 'p;s/old-name/new-name/' | xargs -n2 mv
这里
ls*     - 列出curent文件夹中的文件
sed -e   - 执行表达式
p;       - 打印旧文件名
s/old-name/new-name /   - 生成新文件名
xargs -n2   - 处理mv 
mv的          两个参数 - 获取两个参数并执行移动操作
建议: 在执行mv之前,验证你所做的是你想用echo实现的.
ls * | sed -e 'p;s/old-name/new-name/' | xargs -n2 echo
以下示例重命名
SCCF099_FG.gz5329223404623884757.tmp   到
 
SCCF099_FG.gz
ls *tmp | sed -e 'p;s/\([0-9]\)\+\.tmp/ /g' | xargs -n2 echo
ls *tmp | sed -e 'p;s/\([0-9]\)\+\.tmp/ /g' | xargs -n2 mv
如果第一个数字总是相同的长度:
for F in *new ; do
    mv $F ${F:8}
done
在${parameter:number}做了子扩张-需要字符串开始在第8字符.
在扩展中还有许多其他字符串编辑可用于处理其他情况.