Vind bestanden die tussen een datumbereik zijn gemaakt

Ik gebruik AIX via telnet hier op mijn werk, en ik zou graag willen weten hoe ik bestanden kan vinden in een specifieke map tussen een datumbereik. Bijvoorbeeld: ik wil alle bestanden in map X vinden die zijn gemaakt tussen 01-Aug-13 en 31-Aug-13.

Waarnemingen:

  • De touch-truc (waarbij je twee lege bestanden maakt om de -nieuwere optie te gebruiken) werkt niet voor mij, zodra de gebruikersrollen die ik op de server heb, me niet toestaan ​​om bestanden te maken .
  • Ik moet zoeken tussen specifieke datums, niet dagen (zoals: bestanden die meer dan 30 dagen geleden zijn gemaakt, enz…)

Antwoord 1, autoriteit 100%

Als u GNU findgebruikt, kunt u sinds versie 4.3.3 het volgende doen:

find -newerct "1 Aug 2013" ! -newerct "1 Sep 2013" -ls

Het accepteert elke datumreeks die wordt geaccepteerd door GNU date -d.

U kunt de cin -newerctwijzigen in een van a, B, c, of mom naar atime/birth/ctime/mtime te kijken.

Een ander voorbeeld – lijst met bestanden die zijn gewijzigd tussen 17:30 en 22:00 op 6 november 2017:

find -newermt "2017-11-06 17:30:00" ! -newermt "2017-11-06 22:00:00" -ls

Volledige details van man find:

  -newerXY reference
          Compares the timestamp of the current file with reference.  The reference argument is normally the name of a file (and one of its timestamps  is  used
          for  the  comparison)  but  it may also be a string describing an absolute time.  X and Y are placeholders for other letters, and these letters select
          which time belonging to how reference is used for the comparison.
          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time
          Some combinations are invalid; for example, it is invalid for X to be t.  Some combinations are not implemented on all systems; for example B  is  not
          supported on all systems.  If an invalid or unsupported combination of XY is specified, a fatal error results.  Time specifications are interpreted as
          for the argument to the -d option of GNU date.  If you try to use the birth time of a reference file, and the birth time cannot be determined, a fatal
          error  message  results.   If  you  specify a test which refers to the birth time of files being examined, this test will fail for any files where the
          birth time is unknown.

Antwoord 2, autoriteit 32%

Probeer het volgende commando:

find /var/tmp -mtime +2 -a -mtime -8 -ls

Hierdoor kunt u bestanden in de map /var/tmpvinden die ouder zijn dan 2dagen maar niet ouder dan 8dagen.


Antwoord 3, autoriteit 10%

Enkele goede oplossingen hier. Wilde de mijne delen, want het is kort en eenvoudig.

Ik gebruik find (GNU findutils) 4.5.11

$ find search/path/ -newermt 20130801 \! -newermt 20130831

Antwoord 4, autoriteit 6%

U kunt het onderstaande gebruiken om te vinden wat u nodig heeft.

Vind bestanden die ouder zijn dan een specifieke datum/tijd:

find ~/ -mtime $(echo $(date +%s) - $(date +%s -d"Dec 31, 2009 23:59:59") | bc -l | awk '{print $1 / 86400}' | bc -l)

Of je kunt bestanden tussen twee datums vinden. Eerste datum recenter, laatste datum, ouder. Je kunt naar de tweede gaan en je hoeft mtime niet te gebruiken. Je kunt alles gebruiken wat je nodig hebt.

find . -mtime $(date +%s -d"Aug 10, 2013 23:59:59") -mtime $(date +%s -d"Aug 1, 2013 23:59:59")

Antwoord 5, autoriteit 4%

Gebruik statom de aanmaaktijd te krijgen. U kunt de tijd in het formaat YYYY-MM-DD HH:MM:SSlexicografisch vergelijken.

Dit werk op Linux met wijzigingstijd, aanmaaktijd wordt niet ondersteund. Op AIX wordt de optie -cmogelijk niet ondersteund, maar u zou de informatie toch moeten kunnen krijgen door grepte gebruiken als niets anders werkt.

#! /bin/bash
from='2013-08-01 00:00:00.0000000000' # 01-Aug-13
to='2013-08-31 23:59:59.9999999999'   # 31-Aug-13
for file in * ; do
    modified=$( stat -c%y "$file" )
    if [[ $from < $modified && $modified < $to ]] ; then
        echo "$file"
    fi
done

Antwoord 6

U kunt de volgende opdrachten gebruiken om bestanden tussen 2 specifieke datums weer te geven:

Zoeken in huidige (.) directory:

find . -type f -newermt "2019-01-01" ! -newermt "2019-05-01"

Zoeken in /var/any/directory/directory:

find /var/any/directory/ -type f -newermt "2019-01-01" ! -newermt "2019-05-01"

Antwoord 7

Script oude bestanden

Ik heb geprobeerd deze vraag op een completere manier te beantwoorden, en uiteindelijk heb ik een compleet script gemaakt met opties om je te helpen de opdracht findte begrijpen.

Het script oldfilesbevindt zich in deze repository

Om een ​​nieuw find-commando te “creëren” voer je het uit met de optie -n(dry-run), en het zal je het juiste find-commando afdrukken. moet gebruiken.

Natuurlijk, als u de -nweglaat, wordt deze gewoon uitgevoerd, u hoeft de opdracht findniet opnieuw te typen.

Gebruik:

oldfiles [-v...] ([-h|-V|-n] | {[(-a|-u) | (-m|-t) | -c] (-i | -d | -o| -y | -g) N (-\> | -\< | -\=) [-p "pat"]})
  • Waarbij de opties zijn ingedeeld in de volgende groepen:
    • Help & Info:

-h, –help : deze hulp weergeven.
-V, –version : versie weergeven.
-v, –verbose : Schakel de uitgebreide modus in (cumulatief).
-n, –dry-run : niet uitvoeren, alleen uitleggen hoe u een “find”-opdracht maakt

  • Tijdtype (toegang/gebruik, wijzigingstijd of gewijzigde status):

-a of -u : toegang (gebruik) tijd
-m of -t : wijzigingstijd (standaard)
-c: inode statuswijziging

  • Tijdbereik (waarbij N een positief geheel getal is):

-i N : minuten (standaard, waarbij N gelijk is aan 1 min)
-d N : dagen
-o N : maanden
-y N : jaar
-g N : N is een DATUM (voorbeeld: “2017-07-06 22:17:15”)

  • Testen:

-p “pat” : optioneel patroon om overeen te komen (voorbeeld: -p “*.c” om c-bestanden te vinden) (standaard -p “*”)
-\> : bestand is nieuwer dan het opgegeven bereik, dwz de tijd die erna is gewijzigd.
-< : bestand is ouder dan het opgegeven bereik, dwz de tijd is van ervoor. (standaard)
-= : bestand dat exact N (min, dag, maand, jaar) oud is.

Voorbeeld:

  • Zoek C-bronbestanden die nieuwer zijn dan 10 minuten (toegangstijd) (met breedsprakigheid 3):

    oldfiles -a -i 10 -p"*.c" -\> -nvvv
    Starting oldfiles script, by beco, version 20170706.202054...
    oldfiles -vvv -a -i 10 -p "*.c" -\> -n
    Looking for "*.c" files with (a)ccess time newer than 10 minute(s)
    find . -name "*.c" -type f -amin -10 -exec ls -ltu --time-style=long-iso {} +
    Dry-run
    
  • Zoek H-headerbestanden ouder dan een maand (wijzigingstijd) (breedsprakigheid 2):

    oldfiles -m -o 1 -p"*.h" -\< -nvv
    Starting oldfiles script, by beco, version 20170706.202054...
    oldfiles -vv -m -o 1 -p "*.h" -\< -n
    find . -name "*.h" -type f -mtime +30 -exec ls -lt --time-style=long-iso {} +
    Dry-run
    
  • Vind alle (*) bestanden binnen één dag (1 dec, 2016; geen breedsprakigheid, dry-run):

    oldfiles -mng "2016-12-01" -\=
    find . -name "*" -type f -newermt "2016-11-30 23:59:59" ! -newermt "2016-12-01 23:59:59" -exec ls -lt --time-style=long-iso {} +
    

Natuurlijk, als u de -nverwijdert, voert het programma zelf de opdracht finduit en bespaart u de moeite.

Ik hoop dat dit iedereen helpt om eindelijk deze {a,c,t}{time,min}-opties te leren.

De LS-uitgang:

U zult ook merken dat de ls-optie ls OPTverandert om overeen te komen met het type tijd dat u kiest.

Link naar kloon/download van het oldfiles-script:

https://github.com/drbeco/oldfiles


Antwoord 8

Uitleg: gebruik het unix-commando findmet de vlag -ctime(aanmaaktijd).

Het find-hulpprogramma daalt recursief de directorystructuur af voor elk vermeld pad en evalueert een uitdrukking (samengesteld uit de ‘primaries’ en ‘operands’) in termen van elk bestand in de structuur.

>

Oplossing: volgens officiële documentatie:

-ctime n[smhdw]
             If no units are specified, this primary evaluates to true if the difference
             between the time of last change of file status information and the time find
             was started, rounded up to the next full 24-hour period, is n 24-hour peri-
             ods.
             If units are specified, this primary evaluates to true if the difference
             between the time of last change of file status information and the time find
             was started is exactly n units.  Please refer to the -atime primary descrip-
             tion for information on supported time units.

Formule:

find <path> -ctime +[number][timeMeasurement] -ctime -[number][timeMeasurment]

Voorbeelden:

1.Vind alles dat is gemaakt na 1 week geleden en voor 2 weken geleden.

find / -ctime +1w -ctime -2w

2.Vind alle javascript-bestanden (.js) in de huidige map die tussen 1 dag geleden en 3 dagen geleden zijn gemaakt.

find . -name "*\.js" -type f -ctime +1d -ctime -3d

Other episodes