Как искать файл на основе ДНЯ недели

Надлежащий вызов патча будет быть похожим:

patch -p1 < net-ssh2-0.18-perl5.10.patch

Вы имеете, делают это в каталоге, где файл SSH2.xs.

6
17.02.2016, 15:25
2 ответа

Самый простой путь с find :

find / -daystart -mtime +41 -mtime -408 \
  -printf "%M %n %u %g %10s %TY-%Tm-%Td %Ta %TH:%TM:%TS %h/%f\n" |
awk '($7=="Fri"){print}'

Корректируйтесь -printf как требуется я заставил его посмотреть близко к ls -l здесь. %T%A %C) позвольте Вам использовать strftime() форматирование для меток времени, %Ta будучи днем недели. (Вы, возможно, должны скорректировать дневные диапазоны 41 - 408, но это - действительно просто оптимизация, Вы можете просто grep 2012, или корректируйтесь -printf помочь grep.)

Править: более устойчивая версия, с некоторой небольшой потерей ясности:

find / -daystart -mtime +41 -mtime -408 \
   -printf "%M %n %u %g %10s %TY-%Tm-%Td %Ta %TH:%TM:%TS\0%h/%f\0\0" |
gawk 'BEGIN{RS="\0\0"; FS="[\0]"} ($1~/ Fri /) { printf $2 "\0"}' | 
xargs -0 -n 1 -i ls -l "{}"

Это эмулирует -print0, но каждая строка имеет два \0 разграниченные поля, при этом имя файла является вторым. Замена ls -l "{}" в конце с тем, что необходимо сделать в файл (файлы). Я явно использую gawk, другие awks не берут настолько любезно к \0 байтам в RS/FS (обновленный для обработки новых строк в именах файлов также).

Кроме того, как предложено mreithub можно использовать %Tu а также, или вместо %Ta в течение пронумерованного рабочего дня, независимой от языка опции.

7
27.01.2020, 20:27
  • 1
    Обратите внимание, что что-то вроде этого также покажет файлы с именами, содержащими Fri, даже если они никогда не трогались в пятницу. Я предполагаю, что Вы могли работать вокруг этого с разделителем, разделяя и проверяя каждую часть. Однако, это - достойное приближение, использующее обычно доступные инструменты получитаемым способом, таким образом, +1. –  a CVn 11.02.2013, 12:45
  • 2
    Так, для упрощения этого я использовал бы: find /mnt/music/Datenbank -mtime +41 -mtime -408 -printf "%Ta %p\n"|grep ^Fri|sed 's/^Fri //'. Вы, возможно, должны были бы предварительно ожидать LC_ALL=C, чтобы удостовериться, что недельный день является английским –  mreithub 11.02.2013, 12:48
  • 3
    , мне нравится он еще лучше теперь, но не может upvote дважды, к сожалению, :) Решение @mreithub в комментарии хорошо также. –  a CVn 11.02.2013, 12:51
  • 4
    я буду upvote это для Вас версия @MichaelKjörling ;) –  mreithub 11.02.2013, 12:52
  • 5
    также отмечает, что Вы могли использовать '...-printf %Tu %p\n" |grep ^5|sed 's/^5//' для создания его независимым от языка (но немного менее читаемый... –  mreithub 11.02.2013, 12:55

С gnu tools:

find . -exec bash -c '[[ $(date -r "$0" +%u%Y) = "52012" ]]' {} \; -print

имена файлов / каталогов имеют вид -print , только если предыдущий -exec вернул true , то есть, если mtime , как указано в date -r в указанном формате (% u % Y ) равно 52012

Или, если вы предпочитаете решение только zsh (это очень похоже, строка e выбирает только эти файлы / каталоги, для которых выражение в кавычках возвращает true ):

zmodload zsh/stat
print -rl -- **/*(De_'[[ $(zstat -F "%u%Y" +mtime -- $REPLY) = "52012" ]]'_)
0
27.01.2020, 20:27

Теги

Похожие вопросы