我在unix env中的目录中有以下文件,位于opt / app / tre
qweqtql.txt
drtqtol.txt
reqttgl.txt
seqwtpl.txt
现在我想删除文件名的最后四个字符,并且目录中可以有n个文件 但命令或unix脚本应扫描目录中的所有文件,并从名称本身替换最后四个字符。
所以文件名的结果将是
qwe.txt
drt.txt
req.txt
seq.txt
答案 0 :(得分:1)
您可以使用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
的文件。如果没有,请告诉我们,我会相应地修改它。
答案 1 :(得分:0)
你可以轻松地做到:
for i in *
do
mv $i `echo $i | awk -F. '{print substr($1, 0, length($1)-3) "." $2}'`
done