Eu tenho uma pasta chamada 'amostra' e tem 3 arquivos nela. Quero escrever um script de shell que leia esses arquivos dentro da pasta de exemplo e publique-o em um site HTTP usando curl.
Escrevi o seguinte para listar arquivos dentro da pasta:
for dir in sample/*; do
echo $dir;
done
Mas isso me dá a seguinte saída:
sample/log
sample/clk
sample/demo
Está anexando a pasta pai nela. Quero a saída da seguinte forma (sem o nome da pasta pai)
log
clk
demo
Como eu faço isso?
shell-script
files
directory
for
Raji
fonte
fonte
echo ${dir##*/}
para sair do caminho.Respostas:
Use
basename
para remover o caminho principal dos arquivos:Embora porque não:
fonte
Supondo que seu shell o suporte, você pode usar a expansão de parâmetros
ou você pode simplesmente mudar para esse diretório e fazer a listagem lá
fonte
--
não é necessário aqui. O primeiro argumento é uma sequência fixa sem traços.${parameter##pattern}
é suportado por todos os shells POSIX.Como os sistemas * nix permitem que quase qualquer caractere faça parte de um nome de arquivo (incluindo espaço em branco, novas linhas, vírgulas, símbolos de pipe etc.), você nunca deve analisar a saída do comando "ls" em um script de shell. Não é confiável. Veja Por que você não deve analisar a saída de ls .
Use "find" para criar uma lista de arquivos. Se você estiver usando o Bash, poderá inserir a saída de "localizar" em uma matriz. Exemplo abaixo, com a ressalva de que usei um comando "curl" não funcional!
fonte
Depende do que você deseja fazer com os diretórios.
Para simplesmente imprimir o nome, sem verificar se é um diretório, você pode usar ls:
Melhor seria encontrar, porque você pode usar filtros:
Se você deseja executar comandos nos arquivos, use find e não um loop for:
fonte