'ls -1': como listar nomes de arquivos sem extensão

'ls -1': como listar nomes de arquivos sem extensão

ls -1lista meus elementos assim:

foo.png
bar.png
foobar.png
...

Eu quero que seja listado sem o .pngseguinte:

foo
bar
foobar
...

(o diretório contém apenas .pngarquivos)

Alguém pode me dizer como usar grepneste caso?

Objetivo: Tenho um arquivo de texto onde estão listados todos os nomes sem a extensão. Quero fazer um script que compare o arquivo texto com a pasta para ver qual arquivo está faltando.

Responder1

ls -1 | sed -e 's/\.png$//'

O sedcomando remove (ou seja, substitui pela string vazia) qualquer string .pngencontrada nofimde um nome de arquivo.

The .é escapado como \.para que seja interpretado sedcomo um caractere literal .em vez de regexp .(o que significa corresponder a qualquer caractere). É $a âncora de fim de linha, portanto não corresponde .pngno meio de um nome de arquivo.

Responder2

Você só precisa do shell para este trabalho.

POSIXamente:

for f in *.png; do
    printf '%s\n' "${f%.png}"
done

Com zsh:

print -rl -- *.png(:r)

Responder3

Se você quiser apenas usar o bash:

for i in *; do echo "${i%.png}"; done

Você deve procurar grepao tentar encontrar correspondências, não para remover/substituir o que sedé mais apropriado:

find . -maxdepth 1 -name "*.png"  | sed 's/\.png$//'

Depois de decidir que precisa criar alguns subdiretórios para organizar seus arquivos PNG, você pode facilmente alterá-los para:

find . -name "*.png"  | sed 's/\.png$//'

Responder4

Outra resposta muito semelhante (estou surpreso que esta variante específica ainda não tenha aparecido) é:

ls | sed -n 's/\.png$//p'
  • Você não precisa da -1opção to ls, pois lsassume que se a saída padrão não for um terminal (é um pipe, neste caso).
  • a -nopção sedsignifica 'não imprimir a linha por padrão'
  • a /popção no final da substituição significa '...e imprima esta linha se uma substituição foi feita'.

O efeito líquido disso é imprimir apenas as linhas que terminam em .png, com o .pngremovido. Ou seja, isso também atende à ligeira generalização da questão do OP, onde o diretório não contém apenas .pngarquivos.

A sed -ntécnica geralmente é útil em casos em que você poderia usar grep+sed.

informação relacionada