[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] crontab su sourceforge



Alfredo Finelli ha scritto:
On Sunday 15 January 2006 13:17, Davide Prina wrote:

ho un problema con il crontab ed il simbolo %.

59 * * * * tar -cz /tmp/a > /tmp/$((`date +"\%Y\%m\%d"`)).tar.gz

/bin/sh: line 1: \2006\01\15: syntax error: operand expected (error
token is "\2006\01\15")

da quanto vedo vuoi fare un backup dando al file un nome che contenga la data in cui esso viene creato. Non capisco perché usi $(( ... )) che serve per espandere espressioni aritmetiche (ecco perché gli manca un
operando). Ad esempio:

in realtà voglio fare un'operazione aritmetica in un altro punto, nell'esempio riportato ho accorciato il comando effettivo.
In pratica voglio usare l'opzione

--newer-mtime $((`date +"%Y%m%d"`-1))

in modo da fare dei backup incrementali prendendo le ultime modifiche.

Poi ho ricopiato lo stesso pezzo anche sul nome del file ... senza neanche pensarci che non era più necessario. Strano però che Debian non faccia una piega.

Se vuoi semplicemente che il comando "date" sia eseguito e il suo risultato sostituito sulla linea di comando allora devi usare la cosiddetta "command substitution" (vedi la pagina man), che si ottiene in due modi: con `...` oppure con $( ... ). Se vuoi essere sicuro che la stringa con il formato della data giunga intatta al comando "date" puoi usare apici singoli, senza bisogno di ulteriori caratteri escape. A titolo di esempio:

    $ echo `date '+%Y%m%d'`.tar.gz
    20060115.tar.gz
    $

non funziona, mi ritorna l'errore:

/bin/sh: -c: line 1: unexpected EOF while looking for matching ``'

dal man di crontab (8)

The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the crontab file. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input. There is no way to split a single command line onto multiple lines, ala the shell's trailing "\".

se però faccio:

59 * * * * tar -cz /tmp/a > /tmp/`date +'\%Y\%m\%d'`.tar.gz

mi crea un file con il seguente nome
\2006\01\15.tar.gz

che è già un successo ;-)

Lo stesso risultato l'ottengo se:
* uso i doppi apici " al posto dell'apice singolo '
* uso $() al posto di ``

Strano però che sourceforge abbia un comportamento così diverso da Debian.

Quindi in realtà l'errore è sull'operazione /2006/01/15-1 ... :-(

Grazie al tuo aiuto ho risolto i problemi usando anche sed per eliminare gli slash /

Però ora ho un altro problema ... togliendo -1 avrei un errore ogni inizio mese. Esiste qualcosa per fare operazioni tra date in sh? Se non trovo nulla posso sempre far si che se gli ultimi due caratteri sono 0, allora li trasformo in 01 ;-)

Ciao
Davide

--
Dizionari: http://sourceforge.net/projects/linguistico
Conoscere il TC: http://www.no1984.org
Strumenti per l'ufficio: http://it.openoffice.org
Sistema operativo: http://www.it.debian.org
Browser: http://www.mozilla.org/products/firefox
Client di posta: http://www.mozilla.org/products/thunderbird
Linux User: 302090: http://counter.li.org
--
Non autorizzo la memorizzazione del mio indirizzo di posta a chi usa
outlook: non voglio essere invaso da spam



Reply to: