我在unix env的opt/app/tre 目录中有以下文件
qweqtql.txt
drtqtol.txt
reqttgl.txt
seqwtpl.txt
现在我想删除文件名的最后四个字符,并且一个目录中可以有n个文件但是命令或unix脚本应该扫描目录中的所有文件,并替换名称本身的最后四个字符。
所以文件名的结果是
qwe.txt
drt.txt
req.txt
seq.txt
您可以使用rename
命令。
要删除最后四个字符(abcdefghijklmnopq.txt
到abcdefghijklm.txt
):
rename 's/(.?+).{4}.txt$/$1.txt/' *.txt
删除除前三个字符(abcdefghijklmnopq.txt
到abc.txt
)以外的所有字符:
rename 's/(.{3}).*/$1.txt/' *.txt
如果您希望对文件夹(包括子目录)中的所有.txt
文件执行此操作:
find . -name "*.txt" -exec rename 's/(.?+).{4}.txt$/$1.txt/' {} ;
这可以正确地处理包含空格的目录和文件名,这通常很难正确处理。
PS:在执行rename
命令之前,最好先使用--no-act
选项验证它的作用。换句话说:
rename --no-act 's/(.?+).{4}.txt$/$1.txt/' *.txt
或者:
find . -name "*.txt" -exec rename --no-act 's/(.?+).{4}.txt$/$1.txt/' {} ;
我想你想在扩展名为.txt
的文件上使用这个。如果没有,请告诉我们,我会相应地修改它。
您可以轻松地执行以下操作:
for i in *
do
mv $i `echo $i | awk -F. '{print substr($1, 0, length($1)-3) "." $2}'`
done