Como listar arquivos e diretórios com diretórios primeiro

20

Eu tenho duas perguntas. Primeiro, qual comando lista arquivos e diretórios, mas lista os diretórios primeiro?

Segunda pergunta: Eu quero copiar uma lista de arquivos em um único diretório, mas tornar o diretório de destino o primeiro nome de arquivo no comando.

    
por Elham abbasi 18.10.2011 / 02:03

3 respostas

31

Tem o GNU?

A versão do gnu de ls tem --group-directories-first . E cp tem -t .

Não GNU?

Em sistemas que não têm ls do gnu, sua melhor opção é duas chamadas sucessivas para find com -maxdepth n / -mindepth n e -type t com as opções apropriadas.

find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d

Para copiar arquivos, primeiro com o destino, você teria que escrever um script que salvasse o primeiro argumento, depois usasse shift e anexasse o argumento ao final.

#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"

Cuidado!

Se você planeja usá-los juntos, ou seja, coletar a lista de find ou ls (possivelmente usando xargs ) e passá-la para cp (ou um cp wrapper), você deve estar ciente do que os perigos estão na análise de listas de arquivos (basicamente, nomes de arquivos podem conter caracteres como novas linhas que podem atrapalhar seu script ). Especificamente, veja as opções find -exec e -print0 e xargs -0 .

Uma ferramenta alternativa para copiar com eficiência as árvores de diretórios.

Você pode querer usar o rsync ; tem muitas funcionalidades que podem facilitar o seu trabalho.

    
por 18.10.2011 / 03:07
5

Listar diretórios primeiro para um não-GNU ls :

ls -l | sort

Note que isso listará todas as outras coisas estranhas, como links simbólicos, sockets e pipes (apropriadamente agrupados, é claro), mas considerando que esse tipo de coisa é bastante raro, isso não deveria ser um problema. Caso contrário, o filtro seria ls -l | grep '^(-|d)' | sort

    
por 25.12.2012 / 00:32
4

funciona para bash e zsh

adicione o alias em ~ / .bashrc ou ~ / .zshrc

# Colorize the ls output ##
alias ls='LC_COLLATE=C ls -h --group-directories-first --color=auto'

Além disso, se você tiver o ZSH, poderá usar o utilitário "k"

k -h --group-directories-first

apenas instale-o com o antígeno, colocando o seguinte em ~ / .zshrc

antigen bundle reduxionist/k --branch=add-sort-options
    
por 18.10.2016 / 03:39