ls -l --group-directories-first (também atua nos links simbólicos)

7

ls option --group-directories-first faz com que os diretórios sejam listados na parte superior, o que torna a saída de ls nice e clean:

ls -l --group-directories-first

No entanto, ele não age em symlinks , que na verdade são symlinks para diretórios. Existe a possibilidade de usar

ls -l -L --group-directories-first

que listará os dois tipos de diretórios no topo, mas não fará distinção entre o diretório apropriado e o diretório com links simbólicos, o que é novamente confuso.

A ls pode exibir diretórios encadernados por cima, mantendo-os distintos dos diretórios comuns?

EDITAR: Estou usando bash .

    
por Martin Vegter 30.01.2014 / 11:41

1 resposta

5

Não, mas se você usar zsh , poderá fazer:

mll() {
  (($#)) || set -- *(N-/) *(N^-/)
  (($#)) && ls -ldU -- $@
}

Você também pode definir uma ordem de classificação como:

dir1st() { [[ -d $REPLY ]] && REPLY=1-$REPLY || REPLY=2-$REPLY;}

e use-o como:

ls -ldU -- *(o+dir1st)

Dessa forma, você pode usá-lo para outros comandos além de ls ou com ls com opções diferentes ou para padrões diferentes, como:

ls -ldU -- .*(o+dir1st) # to list the hidden files and dirs

ou:

ls -ldU -- ^*[[:lower:]]*(o+dir1st) # to list the all-uppercase files and dirs

Se você tiver que usar bash , o equivalente seria:

mll() (
  if (($# == 0)); then
    dirs=() others=()
    shopt -s nullglob
    for f in *; do
      if [[ -d $f ]]; then
        dirs+=("$f")
      else
        others+=("$f")
      fi
    done
    set -- "${dirs[@]}" "${others[@]}"
  fi
  (($#)) && exec ls -ldU -- "$@"
)

bash não possui qualificadores globbing ou qualquer forma de afetar a ordem de classificação de globs, ou qualquer forma de transformar o nullglob em uma base per-glob, ou ter contexto local para opções (além de iniciar um subshell, portanto o () em vez de {} acima) AFAIK.

    
por 30.01.2014 / 12:11