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

时间:2015-03-30 09:05:41

标签: linux unix

我在unix env中的目录中有以下文件,位于opt / app / tre

qweqtql.txt
drtqtol.txt
reqttgl.txt
seqwtpl.txt

现在我想删除文件名的最后四个字符,并且目录中可以有n个文件 但命令或unix脚本应扫描目录中的所有文件,并从名称本身替换最后四个字符。

所以文件名的结果将是

qwe.txt
drt.txt
req.txt
seq.txt

2 个答案:

答案 0 :(得分:1)

您可以使用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的文件。如果没有,请告诉我们,我会相应地修改它。

答案 1 :(得分:0)

你可以轻松地做到:

for i in * 
do 
    mv $i `echo $i |  awk -F. '{print substr($1, 0, length($1)-3) "." $2}'`
done