Desejo criar uma lista de todos os arquivos em um diretório, sem listar nenhum dos subdiretórios que residem no mesmo diretório e imprimir essa lista em um novo arquivo.
ls -d * > filelist
criará uma lista de todos os arquivos no diretório atual, mas também listará os subdiretórios no diretório atual. Eu tentei o find
comando usando a -maxdepth 1
opção - no entanto, o formato de saída é um problema, pois o find também imprime o caminho junto com os nomes dos arquivos.
Se alguém puder me dizer, talvez, outro comando ou opções a serem utilizados que produzam uma lista de saída apenas dos arquivos em um diretório e não dos nomes dos subdiretórios ou de seu conteúdo, eu agradeceria.
ls -d *
apenas liste os arquivos e pastas na pasta atual, excluindo arquivos / pastas ocultos aqui;Respostas:
Solução baseada em localização:
Solução baseada em bash:
A solução baseada em bash oferece a você tudo o que não é um diretório; incluirá coisas como pipes nomeados (você provavelmente deseja isso). Se você deseja especificamente apenas arquivos , use o
find
comando ou um destes:Se você vai usar isso regularmente, é claro que pode colocar isso em um alias em algum lugar do seu
~/.bashrc
:Como você observou nos comentários que está realmente no OSX, e não no Ubuntu, sugiro que da próxima vez você encaminhe perguntas para os sites Apple ou mais gerais do Unix e Linux Stack Exchange.
fonte
Listar apenas nomes de arquivos:
Listar apenas diretórios:
grep -v -e ^ $ é remover linhas em branco do resultado.
Mais detalhes :
ls -p flag é colocar '/' no final do nome do diretório, -R flag é para pesquisa recursiva, -l para listar com informações, -a para listar todos (incluindo arquivos ocultos) com informações, grep -v flag é para inversão de resultado e -e flag para correspondência de expressões regulares.
fonte
Para listar apenas arquivos regulares:
Com links simbólicos incluídos:
Onde o primeiro caractere da lista descreve o tipo de arquivo,
-
significa que é um arquivo comum, pois o link simbólico él
.Debian / Ubuntu
Imprima os nomes de todos os arquivos correspondentes (incluindo links):
Com caminhos absolutos:
Imprima os nomes de todos os arquivos
/etc
que começam comp
e terminam comd
:fonte
Mais uma solução, uma ingenuamente curta que funcionou para mim:
fonte
ls -alR |grep -E '^-'
Eu sugeriria usar find e apenas remover o nome do diretório da saída, se necessário:
fonte
-maxdepth 1
deve vir antes de qualquer filtro, e você pode obter esse resultado sem usarsed
com a-printf
opção, ou seja:find . -maxdepth 1 -type f -printf '%f\n'
(isso será mais eficiente do que usar um programa extra).Outra opção possível é
Os
--file-type
coloca um / no final das pastas (mas também um @ no final de links simbólicos.The grep -v '/'
Remove os subdiretórios (porque agora terminar com um '/'). Assed s/@$//
remove essa @. Os -1 imprime um arquivo por linha para que o grep -v funcione corretamente.fonte
-1
não importa grep você não precisa; se você quiser incluir arquivos ocultos, use a-a
opção emls
ls -F | grep -v '/' | sed s/[@*]$// > filelist