Remove o número de hard links da saída do comando 'ls -al'

1

Aqui está o comando ls -al :

total 280K
drwxrwxr-x 2 enan enan 4.0K Jun 28 09:59 ranger/
drwxrwxr-x 2 enan enan 4.0K Jun  8 23:26 scripts/
-rw-rw-r-- 1 enan enan   49 Jun  4 18:19 caps_to_ctrl.sh
-rw-rw-r-- 1 enan enan  739 Jun  4 18:19 cmus.theme
-rw-rw-r-- 1 enan enan 8.6K Jun  4 18:19 compton.conf
-rw-rw-r-- 1 enan enan 5.9K Jun 22 09:39 config
-rw-rw-r-- 1 enan enan  859 Jun 14 12:13 i3blocks.conf
-rw-rw-r-- 1 enan enan 4.7K Jun 14 12:13 init.el
-rw-rw-r-- 1 enan enan 8.7K Jun 28 11:22 init.vim
-rw-rw-r-- 1 enan enan  815 Jun 14 12:13 install.sh
-rwxrwxr-x 1 enan enan  142 Jun  4 18:19 lock.sh*
-rw-rw-r-- 1 enan enan 1.1K Jun 21 13:30 README.md
-rw-rw-r-- 1 enan enan 197K Jun 14 12:13 screenshot.png
-rw-rw-r-- 1 enan enan 1.2K Jun 20 21:51 Session.vim
-rw-rw-r-- 1 enan enan  427 Jun  9 13:46 tmux.sh

Você pode ver que há um número entre as permissões de arquivo -rw-rw-r-- e o proprietário do arquivo enan . Esse número é o número de links físicos do arquivo. Mostrar isso na saída pode ser útil em alguns casos, mas agora não preciso disso e me distrai às vezes. Você pode ver, eu tive uma maneira de remover a data da última modificação da saída de ls -al porque eu não preciso disso agora.

Então, como posso remover o número de links físicos da saída do comando ls -al ? E qual é a importância de ter o número de links físicos e data da última modificação mostrados na saída do comando? Quero dizer, se algum de vocês usar essas informações, diga-me por que e como você faz isso, porque eu não quero sombrear involuntariamente um comportamento que eu deveria usar.

    
por Enan Ajmain 28.06.2018 / 04:31

3 respostas

2

Se você não quiser ver os links que estão na segunda coluna, poderá canalizar ls -al para awk para removê-lo:

ls -al | awk '{$2=""; print $0}'

Isso imprimirá todos, menos a segunda coluna, usando o delimitador padrão, neste caso, que é um espaço.

No meu ambiente, as colunas para a última data modificada são 6, 7 e 8 usando espaço como delimitador para se livrar delas e da segunda coluna:

ls -la | awk '{$2=$6=$7=$8=""; print $0}'

Se você não precisar ou não quiser ver algumas das colunas, poderá usar a sintaxe acima como modelo para remover as que desejar. Não vai doer nada. Se você quiser ver todas as colunas para não perder nada, use o padrão:

ls -al

Se você quiser um alias, adicione o seguinte a ~ / .bashrc:

la() {
    ls -la | awk '{$2=$6=$7=$8=""; print $0}'
}

Essa é uma função que se comporta da mesma maneira sem ter que explicar e escapar das aspas simples e duplas. Eu usei la como ll fornece um erro de sintaxe, pois já é um alias no meu ambiente.

    
por 28.06.2018 / 05:03
1

Para remover a contagem de links físicos da saída de ls -l , deixando o restante da linha intacta:

ls -l | sed -E '2,$s/ +[0-9]+//'

A substituição sed removerá o primeiro conjunto de dígitos e qualquer espaço antes dele em cada linha após a primeira linha (a primeira linha contém o total ).

Como uma função

myls () {
    command ls -l "$@" | sed -E '2,$s/ +[0-9]+//'
}

Esta função chama ls -l com qualquer outro argumento de linha de comando fornecido pelo usuário para a função antes de enviar o resultado através de sed .

Usando command ls , garantimos que, se você decidir renomear a função em ls , a função não se chamaria recursivamente.

Exemplo:

$ ls -la ~/.skel
total 18
drwxr-xr-x  2 kk    wheel  512 May  4 16:29 .
drwxr-xr-x  3 kk    wheel  512 Jun 28 08:15 ..
-rw-r--r--  1 kk    wheel   87 Nov  1  2017 .Xdefaults
-rw-r--r--  1 kk    wheel  771 Feb  9 10:18 .cshrc
-rw-r--r--  1 kk    wheel  101 Nov  1  2017 .cvsrc
-rw-r--r--  1 kk    wheel  359 Nov  1  2017 .login
-rw-r--r--  1 kk    wheel  175 Nov  1  2017 .mailrc
-rw-r--r--  1 kk    wheel  229 May  4 16:29 .profile
-rw-r--r--  1 kk    wheel  108 Apr 15 12:50 .vimrc
-rw-r--r--  1 kk    wheel    0 Apr 21 17:44 .zshrc

$ myls -a ~/.skel
total
drwxr-xr-x  kk    wheel  512 May  4 16:29 .
drwxr-xr-x  kk    wheel  512 Jun 28 08:15 ..
-rw-r--r--  kk    wheel   87 Nov  1  2017 .Xdefaults
-rw-r--r--  kk    wheel  771 Feb  9 10:18 .cshrc
-rw-r--r--  kk    wheel  101 Nov  1  2017 .cvsrc
-rw-r--r--  kk    wheel  359 Nov  1  2017 .login
-rw-r--r--  kk    wheel  175 Nov  1  2017 .mailrc
-rw-r--r--  kk    wheel  229 May  4 16:29 .profile
-rw-r--r--  kk    wheel  108 Apr 15 12:50 .vimrc
-rw-r--r--  kk    wheel    0 Apr 21 17:44 .zshrc

Uma variação da função que age exatamente como ls , a menos que você use ls -l :

ls () (
    add_filter=0
    while getopts ':l' opt; do
        case $opt in
            l)  add_filter=1 ;;
            1)  add_filter=0
        esac
    done

    command ls "$@" | 
    if [ "$add_filter" -eq 1 ]; then
        sed -E '2,$s/ +[0-9]+//'
    else
        cat
    fi
)

A função faz sua própria análise de linha de comando para detectar se a opção -l foi usada (e também não desativada posteriormente pelo uso de -1 ). Se fosse, nós colocamos uma bandeira. Mais tarde, se o sinalizador foi definido, filtramos a saída de ls a sed . Se o sinalizador não foi definido, apenas passamos a saída como está por meio de cat .

    
por 28.06.2018 / 08:16
0

Com ls do ast-open (também incorporado ls do ksh93, se tiver sido incluído e /opt/ast/bin estiver à frente de /bin in $PATH ), você pode especificar totalmente o formato de saída e omitir o número de links ( %3(nlink)u ) lá:

ls -rSZ '%(mode)s %-8(uid)s %-8(gid)s %8(device:case::%(size)u:*:%(device)s)s %(atime)s %(name)s%(linkop:case:?*: %(linkop)s %(linkpath)s)s'
    
por 28.06.2018 / 08:34

Tags