替换目录中文件的最后四个字符



我在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.txtabcdefghijklm.txt):

rename 's/(.?+).{4}.txt$/$1.txt/' *.txt

删除除前三个字符(abcdefghijklmnopq.txtabc.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

相关内容

最新更新