Extrai o nome do arquivo sem extensão no shell script [duplicado]

2

Eu tenho uma carga métrica de arquivos .txt que gostaria de carregar em um banco de dados.

As tabelas têm o mesmo nome que os arquivos .txt, mas sem a extensão.

Então, eu gostaria de executar o comando

for f in *.txt; do mysql -u root -p -e "LOAD DATA LOCAL INFILE '$f' INTO TABLE $f" -D rn4; done

No entanto, o último $f está me dando dores de cabeça, já que quero usar apenas o nome, não a extensão.

Assim, para o arquivo piRNA.txt , o comando se pareceria com

mysql -u root -p -e "LOAD DATA LOCAL INFILE 'piRNA.txt' INTO TABLE piRNA" -D rn4

Como faço isso?

Para tornar a resposta útil para outras pessoas, por favor, não me dê o comando, mas escreva uma ou duas linhas sobre como extrair o nome no caso geral.

    
por The Unfun Cat 26.11.2012 / 09:03

2 respostas

8

Você pode fazer isso em um script de shell:

f=piRNA.txt
g=${f%.txt}

Executando

 echo $f $g

produz a seguinte saída:

piRNA.txt piRNA

Com essa sintaxe % , você remove uma patttern de sufixo correspondente. O padrão de sufixo no exemplo é .txt e f é a variável da qual é removido. Observe que um padrão também pode conter curingas (por exemplo, o manual do bash para detalhes).

Como sempre, caso seus nomes de arquivos possam conter espaços, você deve colocar as referências de variáveis entre aspas duplas (por exemplo, "$f" etc.).

    
por 26.11.2012 / 09:22
3

Tente isto:

for f in *.txt; do echo ${f%.*};done
por 26.11.2012 / 09:22