encontrar comando com -exec ls produz uma saída diferente

0

Estou tentando determinar quais arquivos serão tocados com base na data de modificação. Meu diretório está no topo de uma lista de talvez vários níveis de subdiretórios.

De uma janela de terminal eu corro este comando:

find Program.8.koeb/ -mtime -10

Que produz corretamente uma lista de arquivos modificados nos últimos 10 dias. No entanto, se eu quiser consultar essa lista para ter certeza de que os arquivos que eu quero tocar usando o comando find , eu executaria este comando:

find Program.8.koebe/ -mtime -10 -exec ls -gotrhR {} \;

Que produz uma longa lista de todos os arquivos dentro dos diretórios do meu diretório de trabalho atual, incluindo os subdiretórios, junto com o diretório nomeado find que está designado para procurar. Então, -exec ls -gotrhR {} \; parece estar produzindo a mesma saída que:

find . -mtime -10 -exec ls -gotrhR {} \;

Qual não é minha intenção.

    
por Gustav 25.02.2016 / 17:04

2 respostas

1

Quando você passa um diretório para ls , ele lista os arquivos nesse diretório, não o próprio diretório. Com o -R flag, ls lista arquivos em subdiretórios recursivamente. Para tornar os diretórios ls list em vez de seus conteúdos, passe a opção -d .

As sinalizações -t e -r são inúteis, pois afetam apenas a classificação e você está listando um arquivo por vez.

find Program.8.koebe/ -mtime -10 -exec ls -gohd {} \;

Com o GNU find, você pode usar -printf em vez de invocar um comando externo. O formato de saída será semelhante, mas não exatamente idêntico.

find Program.8.koebe/ -mtime -10 -printf '%M %n %s %M %c %p\n'
    
por 25.02.2016 / 23:39
0

Basta adicionar '-tipo f' porque -exec ls -l {} incluirá esses diretórios e os listará também.

    
por 19.07.2017 / 03:56

Tags