Para obter apenas diretórios, mas omita a barra:
ls -d */ | sed 's#/##'
Ou você terá que usar algo como find . -type d -maxdepth 1
(mas isso introduz o ./
prefixing)
Eu sei
ls -d */
lista todas as pastas no diretório atual como dir1/ dir2/ dir3/
.
Existe a possibilidade de um script bash mostrar pastas como dir1 dir2 dir3
?
Com find
(isso também eliminará o ./
ou /path/to/
que normalmente seria adicionado ao usar find
):
find . -maxdepth 1 -type d -printf '%f\n'
O comando acima incluirá .
e também dotfiles (que normalmente seriam ocultos). Para evitar todos os diretórios começando com um ponto (pelo menos com o GNU find):
find . -maxdepth 1 -type d ! -name '.*' -printf '%f\n'
Se você quiser ver diretórios ocultos, mas não quiser .
, você pode usar (novamente, apenas testado no GNU find, YMMV com outras versões do find):
find . -maxdepth 1 -mindepth 1 -type d -printf '%f\n'
% purobash
:
for f in */; do echo "${f%/}"; done
O seguinte é um pouco trapaceiro, já que ele realmente substitui o /
por um espaço em branco (então não é muito útil em scripts, mas se tudo que você quer é uma saída um pouco mais bonita, você pode gostar):
printf '%s\b \n' */
Como alternativa, você pode usar zsh
em vez de bash
e aproveitar seus qualificadores da glob :
ls -d *(/)
Você pode usar
ls -d */ | awk -F/ '{print$1}'
canaliza a saída ls para awk e diz para considerar o delimitador de campo / as e para imprimir apenas o primeiro campo
A análise de saída de ls
é realmente uma má ideia porque o formato de saída de ls
não é garantido.
Aqui está uma solução que não precisa de ls e, portanto, não depende da formatação da ls
:
echo */ | sed s#/##g
Infelizmente, o código acima não funcionará corretamente com nomes de diretório contendo espaços. Por isso, é melhor separar os itens da lista por novas linhas ou caracteres NULL. Não é fácil separar os argumentos por algo diferente de espaço sem iterá-los em um ciclo de shell.
Solução utilizando /
para identificar onde a nova linha deve ser colocada:
echo -n */ | sed 's#/ \?#\n#g'
Solução que utiliza o separador de expansão de parâmetro alterado:
nsplit() { IFS=$'\n' ; echo "$*" | sed 's#/$##' ; } ; nsplit */