Execute um ls sem obter o caminho completo


5

Quero uma lista simples de arquivos em um diretório que não seja meu diretório atual. Eu corro ls /other/directory/*.txte recebo:

/other/directory/file1.txt
/other/directory/file2.txt

Eu quero:

file1.txt
file2.txt

Como posso obter a segunda lista?


1
Você pode nos dizer qual distribuição linux você está usando? Porque normalmente, ls gera a segunda lista que você mencionou.
Ruel

apenas tentei, posso obter apenas o caminho completo quando chamo 'ls / path / *' sem asterisco, não é possível, qual sistema || shell você usa?

Estou usando o CentOS. Além disso, eu estava simplificando a pergunta original. Eu queria apenas arquivos de texto do diretório. Não percebi que isso *.txtfazia diferença. Eu atualizei a pergunta.
precisa

Respostas:


13

(cd /other/directory && ls)


3

Existe alguma razão pela qual você não pode usar ls -1?

$ ls -1 /other/directory
file1
file2

EDITAR:

Percebo que você mudou a pergunta agora - minha solução não funcionará com seu novo exemplo de ls /other/directory/*.txt. Use algo como a solução khachik , por exemplo, por exemplo

$ (cd /other/directory && ls -1 *.txt)

1

1) Não tenho certeza se isso não deve estar no superuser.com

2) ls não imprime o caminho completo de qualquer maneira: ls -1 /your/dir

Editar A pergunta mudou. Pelo comentário de Paulo abaixo, estou atualizando minha resposta. Você pode fazer assim:

ls -1 /home/rich/*.txt | sed s/^.*\\/\//

Isso é menos 1, não l, embora eu trabalhe também. Explicação: ls -l / -1 grava os nomes dos arquivos com as coisas que você não deseja. Cada linha é canalizada através do sed, que aqui está fazendo uma substituição, conforme especificado pelo s /. Uma substituição assume a forma:

s/text/replacement/

Estamos substituindo tudo, desde o início da linha ^até a última /( /é um caractere especial, por isso temos que escapar \\/) por nada - ou seja, removendo-o e deixando assim apenas o nome do arquivo.


1
Não é uma resposta - deve ser um comentário
Paul R

1
@ Richard, a resposta de Paul tem uma solução. O seu não tem nenhum.
Ruel

1
@Richard (1) é um comentário sobre a questão, (2) está incorreto (observe a diferença entre 1e l) #
Paul R R

1
resposta falsa copiando :)
Ruel

1
A propósito, seu comentário 1) * Não tenho certeza se isso não deve estar no superuser.com * está incorreto. .. isso deve estar no superuser.com
Ruel

1

ls -1 /other/directory/*.txt |xargs basename

  • -1 listará um arquivo por linha com apenas o nome do arquivo (ou caminho)
  • Usar um curinga e / ou fornecer lsum caminho completo produzirá o caminho absoluto completo para cada arquivo. basenameirá remover o caminho, deixando apenas o nome do arquivo.

Feche, mas isso não funciona porque a segunda linha de saída de 'ls' aciona o erro: basename: operando extra '/etc/init.d/dyn-qlpinitiator' (usando o Ubuntu 14).
Crossfit_and_Beer

você pode usarxargs -n1 basename
Boop

0
for i in `ls /some/directory` ;do basename $i;done

A expressão em `` é expandida para os arquivos, então cada um deles é passado para o nome da base. Advertência: Não funciona com arquivos que contêm espaços em branco!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.