obtém apenas o nome do arquivo ao iterar pelo diretório em vez do caminho com ele [duplicado]

1
$ script.sh -i /storage/testFile

-i armazena o caminho de /storage/testFile/ .

Eu quero iterar o arquivo em testFile . Tudo corre bem, mas eu quero tornar este código mais limpo e adicionar um diretório para a saída e outras verificações.

Um trecho do meu código é:

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

Problema:

echo $f retorna /storage/testFiles/test.vcf . Como obtenho apenas test.vcf enquanto eu faço iteração em for loop?

    
por Death Metal 30.11.2014 / 21:43

1 resposta

2

Você precisa usar basename :

Synopsis

basename NAME [SUFFIX]    
basename OPTION 

Description

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

Portanto:

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

Além disso, se você precisar do oposto, use dirname :

$ dirname /storage/testFiles/test.vcf
/storage/testFiles
    
por 30.11.2014 / 21:58