Kirjoittaja Aihe: find'in parametrit  (Luettu 2412 kertaa)

igor_2

  • Käyttäjä
  • Viestejä: 751
    • Profiili
find'in parametrit
« : 10.06.07 - klo:09.56 »
Käytän findiä etsimään tiedostoja (jpg) jotka on luotu jonkin päivämäärän jälkeen ja kopioin ne sitten eri paikkaan josta poltan ne DVD:lle.

Käytän komentoa:

Koodia: [Valitse]
find /home/jaetut/kuvat -mtime -50 -exec cp {} ~/temp/foto_backup \;

Ja siinä siis vipua -mtime jolle annan päivien lukumäärän jota uudemmat kopioidaan (esimerkissä 50).

Mukavinta olisi että sille voisi antaa ihan päivämään että 'hutikuun alun jälkeen' (1.4.2007) syntyneet tiedostot löydetään (ja kopioidaan).

En kuitenkaan löydä findin manuskaalista mitään mikä viittaisi päivämäärään, vain tuon suhteellisen viittauksen taaksepäin.

Ideoita?

SuperOscar

  • Käyttäjä
  • Viestejä: 3999
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: find'in parametrit
« Vastaus #1 : 10.06.07 - klo:16.02 »
findissä semmoista vipua ei tosiaan ole. Ainoa äkkiseltään mieleen tullut komentorivikikkakin oli turhan monimutkainen: ensin pitäisi hakea date-komennolla kahden annetun päivämäärän (nykyhetki, hetki jonka jälkeiset tiedostot haluat kopioida) ”vuodenpäivät” ja vähentää toisesta toinen, sitten antaa erotus findille. Liian vaikeaa :) ainakin minulle.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: find'in parametrit
« Vastaus #2 : 10.06.07 - klo:17.31 »
Ainoa äkkiseltään mieleen tullut komentorivikikkakin oli turhan monimutkainen: ensin pitäisi hakea date-komennolla kahden annetun päivämäärän (nykyhetki, hetki jonka jälkeiset tiedostot haluat kopioida) ”vuodenpäivät” ja vähentää toisesta toinen, sitten antaa erotus findille.

juu, mutta tuostahan voisi tehdä scriptin jonka voi sitten ajaa tuolla find-komennon sisällä.
Janne

SuperOscar

  • Käyttäjä
  • Viestejä: 3999
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: find'in parametrit
« Vastaus #3 : 10.06.07 - klo:19.00 »
Jesh. No, kun en viitsi räpeltää daten, bc:n ja vastaavien kanssa, tässä hätäinen Python-ratkaisu:

Koodia: [Valitse]
import sys
from datetime import date

d0 = date(sys.argv[1], sys.argv[2], sys.argv[3])
d1 = date.today()
print (d1 - d0).days

Tuolle siis komentoriviargumentteina esim. "2007 4 1" eli se haluttu päivämäärä. Pienellä lisävaivalla komentoriviargumentin voisi antaa mukavammassakin muodossa (ja sille voisi tehdä vaikka joitain tarkistuksia :)). ”Uloste” syötetään siis sitten findin -mtime-parametrille.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

igor_2

  • Käyttäjä
  • Viestejä: 751
    • Profiili
Vs: find'in parametrit
« Vastaus #4 : 10.06.07 - klo:20.10 »
Jesh. No, kun en viitsi räpeltää daten, bc:n ja vastaavien kanssa, tässä hätäinen Python-ratkaisu:

Kiitoksia. Pitää ihmetellä.

Jännä juttu muuten tämä liinux - jotkut aivan uskomattomat hommat menee ihan luonnostaan ja sitten jossain taas tökkäsee ihan triviaalintuntuiseen asiaan.

SuperOscar

  • Käyttäjä
  • Viestejä: 3999
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: find'in parametrit
« Vastaus #5 : 10.06.07 - klo:21.39 »
Uups... pieni bugi  ;D Skriptissäni pitää jokainen sys.argv[n] tietysti ensin muuttaa luvuksi. Korjattu rivi:

Koodia: [Valitse]
d0 = date(int(sys.argv[1]), int(sys.argv[2], int(sys.argv[3]))

Jännä juttu muuten tämä liinux - jotkut aivan uskomattomat hommat menee ihan luonnostaan ja sitten jossain taas tökkäsee ihan triviaalintuntuiseen asiaan.

En nyt tiedä, missä määrin tämä on ”triviaalia”. Itse asiassa, eikö varmuuskopioinnissa tms. ole luontevampaakin käyttää suhteellista kuin absoluuttista ajanmääritystä? Ethän sinä halua 1.4.2007 alkaen kopioita kuin kerran, seuraavaksi kopioidessasi päivämäärä on taas jokin muu.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: find'in parametrit
« Vastaus #6 : 10.06.07 - klo:21.58 »
Pojat, pojat... Hieman enemmän uskoa ja luovuutta.

Koodia: [Valitse]
#!/bin/bash

name="$(basename $0)"
[ $# -ne 3 ] && echo "Usage: $name [[CC]YY]MMDDhhmm[.ss] SRCDIR DESTDIR" && exit 1

tempfile="$(mktemp -t "$name.XXXXXXXX")"
touch -t "$1" "$tempfile" \
&& find "$2" -type f -newer "$tempfile" -exec cp {} "$3" \; \
|| echo "FAILED."

rm "$tempfile"

igor_2

  • Käyttäjä
  • Viestejä: 751
    • Profiili
Vs: find'in parametrit
« Vastaus #7 : 10.06.07 - klo:22.24 »
En nyt tiedä, missä määrin tämä on ”triviaalia”. Itse asiassa, eikö varmuuskopioinnissa tms. ole luontevampaakin käyttää suhteellista kuin absoluuttista ajanmääritystä? Ethän sinä halua 1.4.2007 alkaen kopioita kuin kerran, seuraavaksi kopioidessasi päivämäärä on taas jokin muu.

Tarpeita on monia: Itse polttelen kuvat kertakirjoitteiselle DVD:lle kun yksi levyllinen on täynnä. Siihen asti poltan RW DVD:lle n. per kuvauskerta tai viikko ja tässä vaiheessa backup otetaan tietenkin siitä päivämäärästä lähtien jolloin viimeksi otin kopion pysyvälle DVD:lle.

Pitää kokeilla vielä tuota mgronber'in pätkää.