Erro com find e ls

1

Estou tentando usar o find e o ls para classificar os arquivos com base na data, mas não está fazendo nada. Aqui está o meu comando:

find ./.BUBackups -name "test*" -exec ls -t {} \;

Eu também tentei:

find ./.BUBackups -name "test*" -exec ls -lt {} \;

No teste, simplesmente não está fazendo nada. -Está funcionando, mas se eu digito, ele age como se eu não tivesse colocado nada. No entanto, ls -t ou ls -lt funciona perfeitamente bem quando não estou rodando através de exec, em outras palavras simplesmente digitando ls -t works

Isso é uma falha? ou estou fazendo algo errado?

    
por Wipqozn 11.02.2011 / 18:58

2 respostas

3

O argumento -exec para localizar executa o comando especificado uma vez para cada arquivo localizado por find. Então, se você tiver arquivos test_a, test_b e test_c, seu comando será equivalente a:

ls -lt test_a
ls -lt test_b
ls -lt test_c

Em outras palavras, cada listagem é executada de forma independente por arquivo, então os arquivos serão listados na ordem em que forem localizados, e não na ordem de modificação, como a opção -t para ls especifica.

O que você realmente quer é algo como find ./.BUBackups -name 'test*' | xargs ls -lt , que, com os arquivos de exemplo que usei acima, seria equivalente a ls -lt test_a test_b test_c . Como agora você está usando uma chamada de ls para listar todos os arquivos nos quais está interessado, ela pode colocá-los na ordem correta do mtime.

    
por 11.02.2011 / 19:22
3

O motivo -t não está funcionando é que find está executando ls uma vez para cada arquivo encontrado separadamente, portanto, a saída está na ordem em que os arquivos foram encontrados. Para que funcione da maneira esperada:

find ./.BUBackups -name "test*" -exec ls -lt {} +

ou

find ./.BUBackups -name "test*" -print0 | xargs -0 -exec ls -lt 
    
por 11.02.2011 / 19:19

Tags