A melhor maneira de listar apenas os arquivos que possuo

5

Qual seria o melhor comando shell "one liner" que eu poderia usar para listar todos os arquivos em um diretório, mostrando apenas aqueles que eu possuo?

    
por James 12.04.2017 / 02:50

5 respostas

3

Use o comando abaixo

[username@localhost~]$ find / -user username -exec ls -l {} \; 2>/dev/null

encontre todos os arquivos no sistema inteiro de propriedade do nome de usuário. Se você encontrar a partir do diretório específico, basta substituir o local /.

[username@localhost~]$ find /path/of/direcotry -user username -exec ls -l {} \; 2>/dev/null

NB: 2 > / dev / null anula a saída do erro.

    
por 12.04.2017 / 06:10
3

Um one-liner curto seria:

find . -maxdepth 1 -user $USER

Se você estiver procurando no diretório atual, poderá omitir o . . Se você não souber se $USER está disponível, poderá substituí-lo por $LOGNAME ou $(whoami) .

Adicione -ls para mostrar detalhes do arquivo, por exemplo:

find / -maxdepth 1 -user root -ls

Se você quiser fornecer sinalizadores personalizados para ls , poderá usá-lo via -exec :

find / -maxdepth 1 -user root -exec ls -ld {} +

(Nesse caso, o -d flag para ls é necessário para listar diretórios como eles próprios e não seu conteúdo.)

    
por 12.04.2017 / 03:11
0
for i in ./*; do [ -f "$i" ] && [ -O "$i" ] && echo "$i"; done

find . ! -name . -prune -user "$(who -m)" -type f

São as duas formas de listar os arquivos simples no diretório atual que você possui.

    
por 12.04.2017 / 06:48
0

Com zsh , você poderia fazer isso usando o qualificador de glob u :

uid

files owned by user ID id if that is a number. Otherwise, id specifies a user name: the character after the 'u' will be taken as a separator and the string between it and the next matching separator will be taken as a user name. The starting separators '[', '{', and '<' match the final separators ']', '}', and '>', respectively; any other character matches itself. The selected files are those owned by this user. For example, 'u:foo:' or 'u[foo]' selects files owned by user 'foo'.

com o usuário ID

print -rl ./*(u1027)

ou com nome de usuário

print -rl ./*(u_yourusernamegoeshere_)

Como de costume, você pode combiná-lo com outros qualificadores, modificadores etc. para listar apenas arquivos regulares, ocultos ou não, de propriedade do usuário com UID 1027 e classificados por mtime :

print -rl ./*(.Domu1027)
    
por 12.04.2017 / 14:12
0

Como você não especificou o formato da saída, você também pode fazer isso com ls e grep:

ls -lG | grep username

Primeiro, usamos ls com o parâmetro -l, para obter a listagem que inclui o nome de usuário e o nome do grupo.

Em seguida, podemos remover o nome do grupo do resultado com o parâmetro -G.

Depois disso, simplesmente canalizamos para grep e obtemos todos os resultados com o nome de usuário desejado.

EDITAR : Como apontado nos comentários, essa não é uma solução segura ou à prova de balas - no entanto, dependendo das circunstâncias, pode ser uma solução rápida e fácil. um sujo. Interativamente, pode ser aceitável, mas você não deve usá-lo em nenhum script!

    
por 12.04.2017 / 10:40