Scriptes megoldással kell megkeresnem egy könyvtárban lévő legrégebben módosított könyvtárat, majd abból törölni a legrégebben módosított állományt. Meg is találom és törlöm a megfelelő fájlt, melynek következtében a tartalmazó könyvtár módosítási ideje aktualizálódik, ezért a script következő futásakor már nem "ezt" a könyvtárat ítéli majd legrégebben módosítottnak. Gondoltam, törlés előtt stat-tal lekérem a könyvtár aktuális mtime értékét, majd törlés után touch segítségével visszaállítom azt. A gond, hogy bármit állítok be touch segítségével, a stat nem a beállított értéket mutatja, hanem frissebbet. Ls vagy mc a beállítottat hozza. A stat busybox-os. A teszt script:
DIR="/usr/test"
res=$(ls -tr1 ${DIR} | head -n 1)
if [ -d ${DIR}/$res ]; then
res2=$(ls -tr1 ${DIR}/$res | head -n 1)
if [ -n "$res2" ]; then
st=$(stat ${DIR}/$res | grep "Modify")
t=$(echo $st | cut -d ' ' -f 3)
dt="$(echo $st | cut -d ' ' -f 2) ${t%.*}"
if [ -e ${DIR}/$res/$res2 ]; then
rm -rf ${DIR}/$res/$res2; [ $? -eq 0 ] && touch -d "$dt" ${DIR}/$res
fi
fi
fi
Mit rontok el, mivel nem vagyok tisztában?
Kösz!
--------------------------
Szerk: a busybox-os (1.15.3) coreutils/stat.c bugos. Írtam egy saját utilt, azzal minden oké.
- 1087 megtekintés
Hozzászólások
subscribe
színes aláírás
- A hozzászóláshoz be kell jelentkezni
A vége egy fapados getmodtime lett a stat.c folt helyett, miután a busybox-os touch -d-vel is gondok voltak.
a minimal gmt.c
int main(int argc, char *argv[]) {
extern char *optarg;
struct stat statbuf;
struct tm *mtime;
char *tf = NULL;
char buf[200];
int c;
while ( (c=getopt(argc,argv,"i:")) != -1 )
if (c == 'i') tf=optarg;
if (!tf || stat(tf, &statbuf)) exit(EXIT_FAILURE);
mtime=localtime((time_t *)&statbuf.st_mtime);
if (strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", mtime) == 0) exit(EXIT_FAILURE);
printf("%s\n",buf);
return 0;
}
és a teszt script:
DIR="/usr/test"
res=$(ls -tr1 ${DIR} | head -n 1)
if [ -d ${DIR}/$res ]; then
res2=$(ls -tr1 ${DIR}/$res | head -n 1)
if [ -n "$res2" ]; then
st=$(gmt -i ${DIR}/$res)
if [ -n "$st" -a -e ${DIR}/$res/$res2 ]; then
rm -rf ${DIR}/$res/$res2 && touch -d "$st" ${DIR}/$res
fi
fi
fi
-------
A formázás megeszi a '< >' és '&&_{' (_ helyett szóköz) szövegeket. Milyen formázást kell állítanom, hogy ne vágja ki?
- A hozzászóláshoz be kell jelentkezni
Hm, jó megoldás.
A formázásról:
< - <
> - >
& - &
- A hozzászóláshoz be kell jelentkezni