【发布时间】:2015-12-13 02:17:11
【问题描述】:
你能告诉如何使用重命名来重命名所有文件,留下前8个字符和扩展名,例如:
我有:
001 -superfile-blaha_bla.txt
我需要:
001 -supe.txt
【问题讨论】:
你能告诉如何使用重命名来重命名所有文件,留下前8个字符和扩展名,例如:
我有:
001 -superfile-blaha_bla.txt
我需要:
001 -supe.txt
【问题讨论】:
rename 's/^(.{8}).*/$1/' *
会将文件截断为 8 个字符或更少。如果截断导致两个或多个文件映射到相同的名称,rename 默认会发出警告并拒绝覆盖除名称冲突中涉及的一个文件之外的所有文件。
如果你使用
rename --force 's/^(.{8}).*/$1/' *
然后rename 将覆盖文件。
【讨论】:
--force 描述的行为是 util-linux 的 rename 的默认行为。
[int13h@homepc test]$ ls -1 111asdfasdfMjflksdf.txt asdfasdfMjflksdf.txt fsdafs111asdfasdfMjflksdf.txt gggfsdafs111asdfasdfMjflksdf.txt Myjakfjkldjflksdf.txt homepc test]$ rename 's/^(.{8}).*/$1/' * [int13h@homepc test]$ ls -1 111asdfasdfMjflksdf.txt asdfasdfMjflksdf.txt fsdafs111asdfasdfMjflksdf.txt gggfsdafs111asdfasdfMjflksdf.txt Myjakfjkrrrrrrrrrrrr.txt [int13h@homepc 测试]$
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
【讨论】: