sziasztok!
van egy ezer éves script, ami egy megadott könyvtárban levő állományok (pontosabban a könyvtár "tartalmi") változását figyeli. igen primitív módon: egy felcicomázot ls paranccsal egy file-ba termeli az állapotot a keresett állományokról és a megadott időben hasonlítja ezt diff segítségével az egyel korábbi állapothoz. legutóbb az alábbi kimenet jött mailben róla:
10c10
< drwxrwxrwx 2 xyz root 4096 szept 13 14:04 file1
---
> drwxrwxrwx 2 xyz root 4096 szept 13 2012 file1
eszerint a nevezett állomány (ami egy mappa) változott. a változás elvben tartalmi változást nem jelentett (akkor további sorok lettek volna a logban), csak a dátum változott. az meg elég furcsán, hiszen mintha egy év telt volna el, holott nem. sőt, a dolog mintha fordítva következett volna be (idén szept 13, 14:40 dátumú állomány hirtelen 2012-es lett volna). a mentésben levőkkel hasonlítva a 2012-es állapot a valós, a fileok tartalma md5 szerint változatlan.
a jelenséget tovább variálja, hogy mindez egy teljesen értelmetlen időben történt, hajnali 4-kor. mintha valamiért hajnalban változott volna valami (user nincs, kérdéses kötet leválasztva munkaidőn kívül, csak a teszt erejéig csatolva).
van valakinek ötlete arra, hogy mi történhetett?
- 5760 megtekintés
Hozzászólások
tipp: http://www.gnu.org/software/coreutils/manual/html_node/Formatting-file-…
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
a script javítva lesz, nyilván más mód kell, ha ez ilyen. ettől még fura, hogy egy mappa, aminek semmi paramétere (tartalma, timestamp-jei, stb) nem változott, mitől lesz 2-féleképpen listázva, hol így, hol úgy. legalábbis gondolom inkább erre céloztál, mint sima rtfm volt :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
ez mar a megoldas volt :-)
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
jó, így is nézhetjük :) én azért a scriptbe mégis csak a linkelt oldal részhalmazát másolom majd be, jó? :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
double drupal'd
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
Ez egy directory, aminek a modositasi datuma azt mutatja, hogy mikor modosult utoljara a tartalma (uj file letrehozasa/file torlese). Nem lehet, hogy egy uj file kerult bele?
Nemreg irtam egy programot, ami a directory mtime-jat es/vagy atime-jat az illeto directoryban levo legujabb file mtime-jara/atime-jara allitja. Ez neked pont jo lenne, osszehasonlitas elott vegigfuttatod a konyvtarakon, es akkor latszik, hogy melyik directoryban milyen datumu a legfrissebb file.
- A hozzászóláshoz be kell jelentkezni
a a fura log után teljes, részletes összehasonlítás volt, semmi változás nem volt. ezért is volt fura.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Elég szép a progi, de ágyúval verébre...
--
#conf t
#int world
#no shut
- A hozzászóláshoz be kell jelentkezni
Hááát, a touch -r kapcsolójának és a findnak a létezése mellett...
- A hozzászóláshoz be kell jelentkezni
rts-nek is:
A programot magamnak irtam, mert nem talaltam lehetoseget arra, hogy egy konyvtarstruktura minden egyes konyvtaranak a datuma az illeto konyvtarban levo legujabb file datuma legyen - legfokeppen az esztetika miatt, de igy egybol latszik, hogy az illeto konyvtarban melyik a legujabb file (vagy directory). Sokaig a find + touch parossal oldottam meg a dolgot:
touch -r "$(find /path/to/dir -mindepth 1 -maxdepth 1 -printf "%C@;%p\n" | sort -t ";" -k 1 -n -r | head -n 1 | cut -d ";" -f 2)" /path/to/dir
de ez nem mukodik egyes filenevekkel (pl. pontosvesszo vagy newline a file neveben), meg a sok fork miatt sokszorosan (ha jol emlekszem, kb. szazszor) lassabb.
- A hozzászóláshoz be kell jelentkezni
find /path/to/dir -exec touch -r /path/to/dir \{\} \;
Illetve ha csak az adott szinten szeretnéd, és csak a fájlokat, akkor be be lehet vetni (mint a megoldásodban szerepel is) a -maxdepth kapcsolót és a -type f lehetőségét.
Ékezet, szóköz, soremelés nem zavarja, és forkbombának venném.
- A hozzászóláshoz be kell jelentkezni
find /path/to/dir -print0 | xargs touch -0 -r /path/to/dir
es akkor nem fork-bomb
- A hozzászóláshoz be kell jelentkezni
Ez nagyon szep, de nem ugyanazt csinalja :-)
(az enyem a directoryban talalhato legfrissebb file datumara allitja a directory datumat)
- A hozzászóláshoz be kell jelentkezni
"csak a dátum változott. az meg elég furcsán"
Erre már fentebb linkeltek dokumentumot, ezen felül a man ls átolvasása is sok információt nyújt, illetve meg lehet ismerkedni a stat paranccsal is.
"eszerint a nevezett állomány (ami egy mappa) változott. a változás elvben tartalmi változást nem jelentett (akkor további sorok lettek volna a logban), csak a dátum változott"
A könyvtár módosult. De ettől még nem biztos, hogy ez látszik az általad nézett időpontban.
Példa:
# ls -ld --time-style full-iso file1
# touch file1/proba ; rm file1/proba
# ls -ld --time-style full-iso file1
Tehát egyideiglenes file létrejötte is tud ilyen jelenséget okozni.
- A hozzászóláshoz be kell jelentkezni
értem. a dolgot elfogadnám, ha adott idős dátumra cserélődött volna. viszont a dátum nap/hó része nem változott és nem is volt azonos a script futási idejével.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Az ls parancs a hosszú (-l opcióval elérhető) kimenetében a dátumot 2-féle formában szokta írni:
- ha kellően friss a fájl, akkor hónap nap óra:perc formában (első sor a diffben)
- ha nem annyira friss a fájl, akkor hónap nap évszám formában (második sor a diffben)
Ami rohadt zavaró, hogy a "kellően friss" kitételt ritkán dokumentálják hogy mit jelent, én a következőkkel találkoztam eddig:
- az elmúlt egy évben változott (ez itt időtartamot jelent)
- az elmúlt fél évben változott (szintén időtartam)
- ebben az évben változott (ez itt naptári évet jelent, azaz január elsején kb minden "régi" ! )
A fenti listád szerint nálad az ls a 2. pontbeli módszert használja.
(Ami kissé zavaró szokott lenni, hogy a "jövőben változott" fájlok dátumát is a "régi" formában listázza.)
- A hozzászóláshoz be kell jelentkezni
Közel 20 éve írogatok ls parancsokat, de ma sem világos, hogy - bár a szkriptelendő esetek nem kis részében ahol az ember dátummal bíbelődik, ott vissza kell térnie a %s alakhoz - az ls mégsem nyújt ahhoz megjelenítési lehetőséget, vagy elegáns módon nem (GNU: --time-style=+%s).
- A hozzászóláshoz be kell jelentkezni
ezek szerint, ha jól értem, egy változatlan dátumot is tudna "hol így, hol úgy" megjeleníteni, ha teszem fel az általa "határnak nézett időpont körül van"? ez valami szórás függvény? :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
Valamelyest védhető a dolog, ha az az alapigény, hogy a -l lista elemei minél rövidebbek, vagyis nem teljes dátumidősek legyenek: a régi dátumokról derüljön ki, hogy idén vagy tavalyelőtt februáriak.
- A hozzászóláshoz be kell jelentkezni
"idén szept 13, 14:40 dátumú állomány hirtelen 2012-es lett volna"
idén már volt szeptember? :)
- A hozzászóláshoz be kell jelentkezni
nem véletlen írtam így :) ha azt látom egy file-ről, hogy a dátum mellette hó, nap, óra, akkor feltételeztem (eddig), hogy adott éven belüli. most már erre nem hagyatkozom. számomra új volt, hogy ls;ls;ls;ls; szekvencia random elbírálású, tehát statikus adatokat más más pillanatban más formában jelenít meg.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Nincs semmi random. Fél évnél frissebb fájlokra az óra:percet, fél évnél régiebbiekre az évszámot írja ki az "ls -l". Az adott fájl most érte el a fél éves kort.
- A hozzászóláshoz be kell jelentkezni
holnap megnézem a számokat a többi file-nél is, mert van ezzel egy korú, hogy ott vajon miért nem változott meg most. mindenesetre vicces, ha tényleg csak ennyi lesz a megfejtés :))
--
xterm
- A hozzászóláshoz be kell jelentkezni
Egyszerűen ki lehet próbálni:
for(( i=0; i<10; i++ )) ; do
touch -t $(date --date "$i months ago" +%Y%m%d0102) file-$i.txt
done
ls -l file*
- A hozzászóláshoz be kell jelentkezni
olvasni, olvasni, olvasni ... ;-)
$ man ls | grep -C2 "Hat hónap"
-l, --format=long, --format=verbose
A fájlnevek mellett megadja a fájl típusát, engedélyeit a kemény kötések (hard link) számát, a tulajdonos- és a csoportnevet, a méretet bájtokban és az
időbélyeget, azaz a módosítási időt, hacsak nem más időt választottunk egy másik opcióval. Hat hónapnál régebbi, vagy a jelenleginél több mint egy órával
későbbi idővel rendelkező fájlok esetén az időbélyeg az évet tartalmazza a napon belüli időpont helyett.
- A hozzászóláshoz be kell jelentkezni