tentando combinar o comando find com ls -lt

1

Estou tentando encontrar os cinco principais diretórios mais recentes que foram modificados com determinadas permissões.

Meu comando de localização é assim

find -d -perm -a+rwx

Estou tentando combiná-lo com

ls -lt

para obter os resultados da pesquisa e colocá-los em uma lista longa com o arquivo modificado mais recentemente no topo.

Nada que eu tentei funcionou; Acabei recebendo algo dizendo total = 0.

    
por johndoe 21.04.2018 / 23:33

4 respostas

2

zsh-ixly:

ls -ltd -- **/*(/omf777[1,5])

Isso executa uma ls (uma listagem l long, novamente classificada pelo tempo de modificação t e com o sinalizador -d para listar apenas o diretório e não seu conteúdo) nos primeiros 5 ( [1,5] ) arquivos retornados pelo recursivo padrão zsh glob que corresponde aos diretórios ( / ) com 777 permissões ( f777 ), ordenadas por hora de modificação ( om ).

Observe que os arquivos e diretórios ocultos são ignorados. Adicione o qualificador D glob para considerá-los.

    
por 22.04.2018 / 05:01
1

Use stat em vez de ls . Ou seja:

find . -type d -perm -a+rwx -exec stat -c "%Y %n" '{}' ';' | sort -rn | tail -n 5
    
por 22.04.2018 / 00:14
1

Se você tiver as ferramentas Bash (ou Zsh) e GNU instaladas, você pode manipular literalmente qualquer nome de arquivo:

while IFS= read -r -d '' -u 9
do
    printf '%q\n' "${REPLY#* }"
done 9< <(
  find . -type d -perm -a+rwx -printf '%T@ %p
while IFS= read -r -d '' -u 9
do
    printf '%q\n' "${REPLY#* }"
done 9< <(
  find . -type d -perm -a+rwx -printf '%T@ %p%pre%' |
    sort --general-numeric-sort --zero-terminated |
    head --lines=5 --zero-terminated)
' | sort --general-numeric-sort --zero-terminated | head --lines=5 --zero-terminated)

Lendo fora para dentro, isso faz o seguinte:

  1. Encontre diretórios que estão abertos para o mundo.
  2. Para cada diretório, imprima o registro de data e hora de modificação e o caminho do arquivo seguido por um caractere NUL.
  3. Classifique a lista numericamente, isto é, de acordo com o timestamp, já que essa é a primeira coluna.
  4. Obtenha as primeiras cinco entradas com terminação zero.
  5. Leia esta lista uma por uma.
  6. Retira o registro de data e hora de cada entrada.
  7. Imprima uma versão com aspas de cada nome de arquivo.
por 22.04.2018 / 00:50
-1

find é tradicional / convencionalmente pareado com xargs :

find …something… -print0 | xargs -0 …dosomething…

Especificamente para o seu encanamento q-n deve ser feito para xargs -0 ls -dlt

☝️Nota: A versão 1 do BSDs de xargs não será executada se não houver canalização de entrada; mas com o GNU é melhor você usar -r ( man xargs revelaria)

__

1 - Como indicado nos comentários, o OpenBSD é uma exceção (como é frequentemente o caso com o OpenBSD);)

    
por 22.04.2018 / 05:10