sou iniciante e não tenho idéia sobre a sintaxe do script shell Linux.
Eu tenho que mostrar apenas os arquivos que terminam com (.sh) o que já está feito.
mas esses arquivos que terminam com (.sh) seus nomes tem que estar sem ".sh" e "./" mostrados, quando eu usei cut
Eu levei tudo entre os dois pontos
Exemplo: ./hello.sh
saída: /olá
então a barra ainda está lá e não encontrei nenhuma solução sobre isso
Usar localizar/cortar assim quebrará todos os arquivos em subdiretórios. No diretório atual, tente
ls | cut -d"." -f1
ou se houver subdiretórios, tentefind * -name "*.sh" | sed "s/.sh$//"
Com o novo achado, o
*
é expandido para todas as entradas no diretório atual, então poderia ser (por exemplofind file1.sh dir1 dir2 -name "*.sh"
. O canal através do sed, apenas retira o final.Supondo que você queira mostrar os nomes correspondentes ao padrão
*.sh
do diretório atual, sem o.sh
sufixo:O
basename
utilitário gera a parte do nome do arquivo do nome do caminho fornecido como o primeiro argumento e, se um segundo argumento for fornecido, essa string será removida do final do nome. O loop acima não considera nomes ocultos .Se você precisar fazer isso recursivamente, poderá usar
find
assim:Isso chama
basename
cada nome de caminho encontrado e remove osh
sufixo do nome do arquivo de cada um.Se você estiver usando o
bash
shell, também poderá fazer assim:Isso define algumas opções de shell para poder encontrar nomes ocultos (
dotglob
), para evitar loops se não houver correspondências (nullglob
) e para poder usar o**
padrão globbing (globstar
; corresponde "recursivamente").Com o
zsh
shell, você obteria um efeito semelhante com... onde o
D
eN
no qualificador de globbing no final do padrão de globbing tem o mesmo efeito quedotglob
enullglob
nobash
shell, e onde:r
remove o sufixo do nome do arquivo do nome do arquivo (r
~ "root", ou seja, a raiz do nome sem suffix) e:t
remove a parte do diretório do nome do caminho (t
~ "cauda", ou seja, o final do nome do caminho).Para ordenar os nomes em ordem decrescente (por nome), no
zsh
shell você usaria... onde o adicionado
On
significa "ordem na ordem inversa pelo nome".Ordenar a saída do
bash
(s) loop(s) no topo é uma questão de passar a saída porsort -r
:Da mesma forma com o
find
comando:Observe, porém, que isso lhe daria resultados estranhos se qualquer nome de arquivo contiver caracteres de nova linha incorporados.