.
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.
Um homem com um efusivo tecnológico que explorou algumas das incríveis coisas tecnológicas e está explorando mais. Enquanto avançava, tive a chance de trabalhar no desenvolvimento Android, Linux, AWS e DevOps com várias ferramentas de código aberto.
.