Использование find и stat для отображения имени файла (ов) и статистики

3

Я пытаюсь запустить команду, чтобы найти все файлы, начинающиеся с «geo», и посмотреть, когда они были отредактированы. Я стараюсь следовать, но, к сожалению, мне не повезло.

Есть ли параметр stat для отображения имени файла или мне нужен многострочный скрипт bash ...

Это работает:

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

Это не:

# find . -name 'geo*' -exec echo {}&&stat -c%y {} \;
find: missing argument to '-exec'
    
задан Menelaos Bakopoulos 03.05.2014 в 21:07
источник

3 ответа

2

Вы можете использовать %n для имени файла в stat

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

В качестве альтернативы вы можете напечатать время изменения файла как %Tk (где k - это спецификатор datetime, аналогичный тому, который используется в 'C' strftime ) и имя %p непосредственно из команды find, например

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

или в формате, близком к формату stat -y

find . -name 'geo*' -printf '%TY-%Tm-%Td %TT %Tz    %p\n'
    
ответ дан steeldriver 03.05.2014 в 23:40
2

Использование:

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

Используйте stat --help для получения дополнительной информации

    
ответ дан Paul B 03.05.2014 в 21:29
1

Он не работает, потому что & amp; & amp; которые вы добавляете к команде:

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

Как вы можете видеть, && съедается оболочкой и никогда не достигает find . Вы можете использовать решение PaulB в этом случае:

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
    
ответ дан Braiam 03.05.2014 в 22:15