technology

Como obter um nome de arquivo do caminho absoluto no Linux

.

Quando eu lhe der um caminho absoluto para um arquivo específico, como /etc/ssh/sshd_config e a partir disso, se eu pedir para você me dizer o nome do arquivo, você pode facilmente me dizer que o sshd_config é o arquivo e o resto são diretórios de suporte onde o arquivo existe.

A mesma coisa que você pode fazer em seu script, onde ele encontrará automaticamente e informará o nome exato do arquivo do caminho absoluto ou completo fornecido.

Então vamos ver como realizar essa tarefa usando utilitários de nome de base e substituição de parâmetro bash neste artigo e depois de ler este artigo, você poderá aplicar as etapas a seguir em seu script bash.

Extraia o nome do arquivo usando o utilitário basename

Quando você deseja extrair um nome de arquivo de um determinado caminho, deve pensar no comando basename, que faz parte do Coreutils, para encontrar o nome base pré-instalado em seu sistema e, portanto, basta executar o seguinte comando para extraia o nome do arquivo do caminho completo no Linux.

Para explicar como o comando basename mostrará os resultados de saída, vamos dar um exemplo que nos dará uma visão clara dos recursos do comando.

Deixe-me tomar o caminho completo do sshd_config arquivo com o comando basename no trecho abaixo.

$ basename /etc/ssh/sshd_config

A saída do comando acima

[email protected]:~$ basename /etc/ssh/sshd_config
sshd_config

E como eu disse, o comando basename mostrará apenas o nome do arquivo removendo as informações do diretório do caminho completo do respectivo arquivo.

Vamos dar outro exemplo onde você verá como remover o sufixo ou extensão deste arquivo manual: /usr/share/man/man1/basename.1.gz.

Se usarmos o comando acima, ele apenas removerá o caminho do arquivo e não o sufixo anexado ao nome do arquivo. Para removê-lo, você precisa executar o seguinte comando no seu terminal.

$ basename --suffix=.1.gz /usr/share/man/man1/basename.1.gz
or
$ basename -s .1.gz /usr/share/man/man1/basename.1.gz

A saída do comando acima.

[email protected]:~$ basename -s .1.gz /usr/share/man/man1/basename.1.gz
basename

Outra opção interessante é usar -uma para aceitar vários caminhos de arquivo para obter um nome de arquivo no terminal. No entanto, você também pode obter o mesmo resultado quando estiver usando o -s ou -sufixo opção.

$ basename -a /usr/share/man/man1/basename.1.gz /usr/share/man/man1/mawk.1.gz

Extraia o nome do arquivo usando a substituição do parâmetro bash

Como alternativa, você também pode obter o nome do arquivo do caminho completo do arquivo sem usar o nome base. Oh, isso soa legal, mas como podemos conseguir isso? Basta seguir os passos indicados abaixo.

Para começar, primeiro você deve conhecer o caminho completo do arquivo, que deseja armazenar em uma variável, e depois imprimirá o nome do arquivo usando echo com um padrão para remover o caminho do arquivo.

Digamos que eu tenha o caminho de /usr/share/man/man1/basename.1.gz no qual usarei para executar o seguinte comando para obter o nome do arquivo.

$ FILEPATH=/usr/share/man/man1/basename.1.gz
$ echo ${FILEPATH##*/}

A saída dos comandos acima

[email protected]:~$ FILEPATH=/usr/share/man/man1/basename.1.gz
[email protected]:~$ echo ${FILEPATH##*/}
basename.1.gz

Além disso, você também pode extrair a extensão do arquivo executando o comando abaixo, que removerá o caminho do arquivo até encontrar o primeiro ponto e, em seguida, exibirá a extensão do arquivo.

Você pode consultar o trecho de código abaixo para obter a extensão do nome do arquivo.

FILEPATH=/usr/share/man/man1/basename.1.gz 
echo "${FILEPATH#*.}"            # It will print 1.gz 
echo "${FILEPATH##*.}"           # It will print gz

Bem simples, não é?

Folha de dicas para obter o nome do arquivo do caminho completo

  • Extraia o nome do arquivo do caminho completo usando o comando basename
    • $ basename /usr/share/man/man1/basename.1.gz
  • Extraia nomes de arquivos do caminho completo sem extensão ou sufixo usando o comando basename
    • $ basename --suffix=.1.gz /usr/share/man/man1/basename.1.gz
  • Extraia o nome do arquivo dos vários caminhos completos usando o comando basename
    • $ basename -a /usr/share/man/man1/basename.1.gz /usr/share/man/man1/mawk.1.gz
  • Extraia o nome do arquivo do caminho completo usando a substituição do parâmetro bash
    • $ FILEPATH=/usr/share/man/man1/basename.1.gz
    • $ echo ${FILEPATH##*/}
  • Extraia a extensão do caminho completo usando a substituição do parâmetro bash
    • FILEPATH=/usr/share/man/man1/basename.1.gz
    • echo "${FILEPATH##*.}"

Isso é tudo por agora, e certifique-se de anotar a folha de dicas acima para uso posterior.

.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo