获取shell脚本中具有特定扩展名的文件名

时间:2015-07-31 19:07:10

标签: bash shell

我在目录中有三个文件,其结构如下:

file.exe.trace, file.exe.trace.functions and file.exe.trace.netlog

我想知道如何将file.exe作为文件名? 在其他世界我需要获得具有.trace扩展名的文件名?我应该注意,你可以看到所有文件都有.trace部分。

3 个答案:

答案 0 :(得分:2)

如果$FILENAME有名称,则可以从${FILENAME%%.trace*}

获取根部分
for FILENAME in *.trace; do
    echo ${FILENAME%%.trace*}
done

答案 1 :(得分:1)

您还可以使用basename

for f in *.trace; do 
    basename "$f" ".trace"
done

更新:除.trace之外的.trace.functions之外,之前的广告系列文件还有额外扩展程序,但以下sed会执行以下操作:

sed -r 's_(.*)\.trace.*_\1_' <(ls -c1)

您也可以在for循环中使用它:

for f in *.trace*; do 
    sed -r 's_(.*)\.trace.*_\1_' <<< "$f"
done

答案 2 :(得分:0)

尝试:

for each in *exe*trace* ; do echo $each | awk -F. '{print $1"."$2}' ; done | sort | uniq