在linux中批量重命名

时间:2015-09-16 13:08:41

标签: regex linux sed rename

请告诉我们如何使用重命名重命名所有文件,保留前8个字符和扩展名,例如:

我有:

001 -superfile-blaha_bla.txt

我需要:

001 -supe.txt

2 个答案:

答案 0 :(得分:3)

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

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

如果您使用

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

然后rename将覆盖文件。

答案 1 :(得分: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    

用法:script directory_name

注意事项:
将覆盖重复项,短于8个字符的文件名将以一个部分双重后缀结束,即ab.dat最终将成为ab.dat.dat