在迭代目录而不是路径时仅获取文件名

在迭代目录而不是路径时仅获取文件名
$ script.sh -i /storage/testFile

-i存储 的路径/storage/testFile/

我想迭代testFile.一切都很顺利,但我想让这段代码更清晰,并添加一个用于输出和其他检查的目录。

我的代码片段是:

for f in $inDir/*.vcf; do
    if [ -f $f ]; #check if file is true or exists
    then
    if [   ${f: -4} == ".vcf" ] # check if the file ends with .vcf
        then
        convert2annovar.pl -format vcf4 "$f" > ./"$f".avinput  #run my code
     fi
    fi
done

问题:

echo $f返回/storage/testFiles/test.vcf。如何仅test.vcf在循环迭代时获取for

答案1

您需要使用basename

Synopsis

basename NAME [SUFFIX]    
basename OPTION 

Description

Print NAME with any leading directory components removed. If
specified, also remove a trailing SUFFIX.

所以:

$ basename /storage/testFiles/test.vcf
test.vcf

另外,如果你需要相反的,你可以使用dirname

$ dirname /storage/testFiles/test.vcf
/storage/testFiles

相关内容