Listando nomes de arquivos sem extensões no terminal?

2

Estou usando um mac. Preciso obter uma lista de arquivos em uma pasta sem que suas extensões sejam incluídas na lista. Isso ocorre porque eu preciso de uma lista de produtos para importar um site e, convenientemente, os nomes das imagens são os mesmos que os nomes dos produtos. No entanto, minha lista NÃO precisa ter as extensões.

Eu obtive uma lista de nomes de arquivos usando o terminal e consegui copiá-los em um arquivo de texto. O único problema é que os nomes dos arquivos incluem a extensão ".jpg". Usando a lista que tenho do terminal, agora terei que examinar meu arquivo de texto e excluir manualmente a extensão de cada nome de arquivo (existem mais de mil) e isso vai levar muito tempo. Existe uma maneira mais fácil? Posso fazer com que o terminal exiba uma lista de nomes de arquivos sem suas extensões para que eu possa copiá-lo e colá-lo em uma lista? Ou posso remover as extensões desses arquivos, listá-las no terminal e copiar seus nomes? Existe outro caminho? Confuso aqui. Eu não sou um programador, apenas um design de site.

Espero que alguém possa ajudar com isso. Obrigado a todos!

TyMurcielago
fonte

Respostas:

2

Emprestado do Stackoverflow :

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

Tentei sinalizar como duplicado, mas não funcionou.

Uma das minhas próprias soluções, pois sabemos a (s) extensão (ões) do arquivo.

find -type f -exec basename -s '.jpg' "{}" \;

Portanto, encontre todos os arquivos em vez de diretórios - type fe execute-os basenamepara cada um. O -spermite especificar um sufixo conhecido para remover.

Outra solução alternativa: da SU

fswings
fonte
1
Como os comentários sobre a resposta que você vinculou apontam, isso remove a primeira . (e tudo à direita dela), assim Mr.Coffee_machine.jpgse torna Mr. Isso pode ser bom o suficiente para as necessidades desse OP, mas é uma suposição perigosa, uma vez que a pergunta não tem nenhum exemplo de nome de arquivo e é uma solução ruim para o problema de "remover extensões de nome de arquivo".
G-Man
Bom ponto, não sei quais são os nomes dos arquivos.
Fswings
1

Se você possui sua lista de arquivos no arquivo "in.txt", execute este script para obter a lista de arquivos sem a extensão em "out.txt":

#!/bin/bash    
while read fullfile; do
    filename=$(basename "$fullfile")
    filename="${filename%.*}"
    echo $filename >> out.txt
done <in.txt
Bogdan
fonte
1

Você usa vi(ou vim)? Se sim, como você já tem os nomes dos arquivos JPEG em um arquivo de texto, a maneira mais fácil pode ser editar esse arquivo com vi/ vime digite

:%s/\.jpg$//

que diz que, em todas as linhas do arquivo, procure .jpgocorrer no final de uma linha, remova-a e substitua-a por nada. Se há algumas linhas que não terminam .jpg, tudo bem; eles serão ignorados (ignorados). Se você tiver vários nomes de produtos (nomes de arquivos) por linha, como em

        hammer.jpg              screwdriver.jpg         wrench.jpg

basta deixar de fora $e adicione ge diga

:%s/\.jpg//g

que removerá todas as ocorrências de .jpg, mesmo que não estejam no final de uma linha.

G-Man
fonte