Usando find e stat para exibir nome (s) de arquivo (s) e estatísticas

3

Estou tentando executar um comando para encontrar todos os arquivos que começam com 'geo' e ver quando eles foram editados. Estou tentando seguir mas infelizmente não estou tendo sorte ..

Existe um parâmetro para stat para exibir o nome do arquivo ou eu preciso de um script bash de várias linhas ...

Isso funciona:

find . -name 'geo*' -exec stat -c%y {} \;

Isso não:

# find . -name 'geo*' -exec echo {}&&stat -c%y {} \;
find: missing argument to '-exec'
    
por Menelaos Bakopoulos 03.05.2014 / 21:07

3 respostas

2

Você pode usar %n para o nome do arquivo no stat

find . -name 'geo*' -exec stat -c '%y       %n' {} \;

Como alternativa, você pode imprimir o tempo de modificação do arquivo como %Tk (onde k é um especificador datetime semelhante aos usados pelo 'C' função strftime ) e nome %p diretamente do comando find, por exemplo

find . -name 'geo*' -printf '%Tc %p\n' 

ou em um formato mais próximo de stat -y

find . -name 'geo*' -printf '%TY-%Tm-%Td %TT %Tz    %p\n'
    
por steeldriver 03.05.2014 / 23:40
2

Uso:

find . -name 'geo*' -exec stat -c%n\ %y {} \;

Use stat --help para mais informações

    
por Paul B 03.05.2014 / 21:29
1

Não está funcionando porque o & amp; & amp; que você acrescenta ao comando:

execve("/usr/bin/find", ["find", ".", "-name", "geo*", "-exec", "echo", "{}"], [/* 56 vars */]) = 0
brk(0)                                  = 0x9914000

Como você pode ver, o && é comido pelo shell e nunca alcança find . Você pode usar a solução PaulB neste caso:

find . -name 'geo*' -exec stat -c%n%y {} \;
./.steam/ubuntu12_32/steam-runtime/i386/usr/share/X11/locale/georgian-academy2013-02-20 06:03:01.000000000 -0400
./.steam/ubuntu12_32/steam-runtime/i386/usr/share/X11/locale/georgian-ps2013-02-20 06:03:01.000000000 -0400
./.PlayOnLinux/fonts/georgiai.ttf2014-03-21 17:32:48.427937178 -0400
    
por Braiam 03.05.2014 / 22:15

Tags