2015-09-16 43 views
2

能否请你告诉如何使用重命名重命名的所有文件,在离开前8个字符和扩展名,例如:质量重命名的Linux

我:

我需要:

001 -supe.txt 

回答

3
rename 's/^(.{8}).*/$1/' * 

会截断文件为8个字符或更少。如果截断导致两个或多个文件映射到相同的名称,rename默认情况下会发出警告并拒绝覆盖名称冲突中涉及的所有文件之外的所有文件。

如果使用

rename --force 's/^(.{8}).*/$1/' * 

然后rename将覆盖该文件。

+0

对不起,但我的重命名实用程序没有选项--force $ rename --version 从util-linux重命名2.27 – int13h

+0

根据此[util-linux rename man page](http://man7.org/linux/man -pages/man1/rename.1.html),“重命名没有保护措施。”所以它与util-linux一起出现,我为'--force'描述的行为是util-linux的'rename'的默认行为。 – unutbu

+0

[[email protected] test]$ ls -1 111asdfasdfMjflksdf.txt asdfasdfMjflksdf.txt fsdafs111asdfasdfMjflksdf.txt gggfsdafs111asdfasdfMjflksdf.txt Myjakfjkldjflksdf.txt rrrrrrrrrrrrrrrr.txt [[email protected] test]$ rename 's/^(.{8}).*/$1/' * [[email protected] test]$ ls -1 111asdfasdfMjflksdf.txt asdfasdfMjflksdf.txt fsdafs111asdfasdfMjflksdf.txt gggfsdafs111asdfasdfMjflksdf.txt Myjakfjkldjflksdf.txt rrrrrrrrrrrrrrrr.txt [[email protected] test]$
int13h

0
IFS=$'\n' 
files=`ls -1 $1` 
for x in $files 
do 
    filename="$x" 
    if [ $filename = `basename $0` ] # do not include this script file 
     then 
     echo "skipping script file" 
     continue 
    fi 
    suffix=${filename: -4} 
    name=${filename:0:8} 
    echo "renaming $x to $name$suffix" 
    mv $1/"$x" $1/$name$suffix 
done  

用法:脚本目录名

注意事项:
将覆盖重复,文件名少于8个字符将结束与部分双后缀即ab.dat将结束是ab.dat.dat