Eu tenho duas perguntas. Primeiro, qual comando lista arquivos e diretórios, mas lista os diretórios primeiro?
Segunda pergunta: quero copiar uma lista de arquivos em um único diretório, mas torne o diretório de destino o primeiro nome do arquivo no comando.
command-line
shell-script
ls
Elham abbasi
fonte
fonte
ls
tem um--group-directories-first
interruptor.-t
é possivelmente uma opção apenas GNU,cp
que requer um diretório de destino explícito e, portanto, pode ir a qualquer lugar na linha de comando, incluindo o início.Respostas:
GNU obtido?
A versão gnu do
ls
has--group-directories-first
. Ecp
tem-t
.No GNU?
Em sistemas que não têm gnu é
ls
, sua melhor aposta é duas chamadas sucessivas parafind
com-maxdepth n
/-mindepth n
e-type t
com as opções apropriadas.Para copiar arquivos, com o destino primeiro, você teria que escrever um script que salve o primeiro argumento, depois use
shift
e inclua o argumento no final.Cuidado!
Se você estava planejando usá-los juntos - ou seja, coletando a lista de (
find
ouls
possivelmente usandoxargs
) e passando-a paracp
(ou umcp
wrapper), você deve estar ciente de quais perigos existem na análise de listas de arquivos (basicamente, os nomes de arquivos podem conter caracteres como novas linhas que podem atrapalhar seu script). Especificamente, olhar emfind
's-exec
e-print0
opções exargs
' s-0
opção.Uma ferramenta alternativa para copiar com eficiência as árvores de diretórios.
Você pode querer usar o uso
rsync
; possui muitas funcionalidades que podem facilitar seu trabalho.fonte
--group-directories-first
).ls --version
para descobrir qual deles possui.Listando diretórios primeiro para um não-GNU
ls
:ls -l | sort
Observe que isso listará todo o resto de outras coisas estranhas, como links simbólicos, soquetes e tubos (agrupados adequadamente, é claro), mas considerando que essas coisas são bastante raras, não devem ser um problema. Caso contrário, o filtro seria
ls -l | grep '^(-|d)' | sort
fonte
sort -r
.funciona para bash e zsh
basta adicionar o alias em ~ / .bashrc ou ~ / .zshrc
Além disso, se você possui o ZSH, pode usar o utilitário "k"
basta instalá-lo com antígeno, colocando o seguinte em ~ / .zshrc
fonte
Para
zsh
listagens de conclusão, você pode definir olist-dirs-first
estilotrue
para os diretórios a serem mostrados primeiro. No seu~/.zshrc
:(aqui aplicado a todos os widgets de conclusão que o suportam e a todos os comandos; você pode restringir que, se quiser, consulte a
zstyle
documentação para obter detalhes)Se você ainda não o fez, certifique-se de executar
compinstall
também para obter listas de conclusão em cores, com descrições, etc. e todos os outros itens.fonte
Para não-GNU, o awk pode filtrar todos os outros campos:
ls -l
must contém 9 camposA saída parece,
ls -1
mas com os diretórios colocados em primeiro lugar:De acordo com "O formato longo" da página do manual ls, quando outros tipos de arquivos são envolvidos, a ordem de saída deve ser:
Uma útil função bash (coloque-a no seu .bash_profile ou .bashrc):
fonte