[linux]Find files created on weekday

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Het commando find heeft de handige optie -ctime om files te zoeken die gemaakt zijn voor of na een bepaald tijdstip.
Is er ook een optie waarmee ik kan zoeken naar files die gemaakt zijn op een bepaalde weekdag (maandag, dinsdag etc.)

Ik heb gezocht en kom o.a. hierop terecht: http://www.cyberciti.biz/...ix-osxfind-files-by-date/

Maar ls -l lijkt mij niet het meest handige commando als ik alle files van een bepaalde dag in de week wil hebben.

Wie weet hoe ik met find kan zoeken op een bepaalde weekdag?
Of zoek ik in de verkeerde richting en is er een veel slimmere manier om dit te doen?

Acties:
  • 0 Henk 'm!

  • berties
  • Registratie: Januari 2000
  • Laatst online: 30-09 09:24
Aangezien je aan ctime refereert ga ik er van uit dat het benaderingsdatum of veranderingsdatum ipv aanmaakdatum moet zijn.
In het geval van benaderingsdatum kun je het volgende gebruiken:

code:
1
find . -printf '%AA %Ax %p'\\n


Als je die nu grept met je gewenste weekdag dan kun je de bestanden filteren die op die weekdag voor het laatst bedaderd zijn.

code:
1
find . -printf '%AA %Ax %p'\\n |grep maandag


In het geval van veranderingsdatum vervang je in het bovenstaande %A door %C

Voor de volledigheid:
code:
1
find . -printf '%a %p'\\n

zou ook nog kunnen, maar dan heb je de verkorte weekdag notatie, je loopt dan het gevaar dat je grept op "Mon" en er daarmee ook andere bestanden gegrept worden die bijvoorbeeld "Mon" in de filename hebben zitten. Daarom lijkt me de eerste optie het beste.

[ Voor 8% gewijzigd door berties op 06-02-2012 16:38 ]


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 03-10 21:32

MartinMeijerink

Computerrorist

je loopt dan het gevaar dat je grept op "Mon" en er daarmee ook andere bestanden gegrept worden die bijvoorbeeld "Mon" in de filename hebben zitten.
Niet als je er een ^ voor zet:
code:
1
find . -printf '%a %p'\\n|grep ^Mon

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

  • Big Mama
  • Registratie: Mei 2000
  • Laatst online: 03-10 21:36
van.der.schulting schreef op maandag 06 februari 2012 @ 13:59:
Het commando find heeft de handige optie -ctime om files te zoeken die gemaakt zijn voor of na een bepaald tijdstip.
De 'ctime' staat voor change-time, en niet voor creation-time.
Afgezien van nagelnieuwe filesystemen als zfs/ext4/btrs ondersteund geen enkel UNIX/Linux filesystem het bijhouden van de creation-time. De change-time geeft weer wanneer een bestand/directory voor het laatst qua eigenschappen is veranderd (andere permissies, eigenaar, enz).

Computers follow your orders, not your intentions.


Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Het werkt, thanks so far ;)

Nu m'n volgende vraag:
Dit commando
code:
1
find -xdev -type f -name *_full__SQL*backup*.gz -ctime +7 -printf '%p %AA %Ax'\\n | grep -e Tuesday -e Wednesday -e Thursday -e Friday -e Saturday -e Sunday


Geeft zoiets terug als
code:
1
/2012/01/DB__full__SQL_backup__scrapers_v1_production__2012-01-08.sql.gz Sunday 01/08/2012


Deze regels schrijf ik weg naar een tempfile ($REMOVE_LIST). Deze tempfile lees ik uit en verwijder de files mbv de volgende code:
code:
1
cat ${REMOVE_LIST} | while read file ; do rm -f "${file}" ; done

Alleen m'n remove snap het op dit moment niet. Logisch, want een regel, zoals het volgende kan hij niks:
code:
1
/2012/01/DB__full__SQL_backup__scrapers_v1_production__2012-01-08.sql.gz Sunday 01/08/2012


Hoe zorg ik ervoor dat van bovenstaande regel de datum eraf wordt gestript en het een regel wordt zoals:
code:
1
/2012/01/DB__full__SQL_backup__scrapers_v1_production__2012-01-08.sql.gz


Met andere woorden, na de 'grep' wil ik de datum van de regel 'afstrippen'. Hoe doe ik dat in bash?

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 03-10 11:10

SA007

Moderator Tweaking
Ik zou zeggen
code:
1
echo $filename | cut -d' ' -f1


Maar dat werkt alleen als er geen spaties in de filenaam zelf zitten.

Acties:
  • 0 Henk 'm!

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08 16:29

Tim

Het antwoord is altijd awk:
LC_ALL=C find . -type f -printf '%AA\0%p\n' | awk -F'\0' '$1 ~ /Saturday|Sunday/ { print $2 }'
Vergeet de LC_ALL niet, anders werkt het opeens niet meer als je systeem op een andere taal is ingesteld.
Pagina: 1