Spostare il file più vecchio tramite il cron

Ho due directory.

/application/inbox /application/unresponsive 

L'applicazione cerca i file * .txt nella casella e funziona con loro. Periodicamente l'applicazione salva le voci da questi file in file datati (2009-07-31) nella cartella non rispondente.

Vorrei impostare un lavoro cron che funziona una volta al giorno per spostare il file più vecchio dalla casella non rispondente nella casella di posta, aggiungendo un'estensione * .txt in modo che venga prelevata dall'applicazione.

2 Solutions collect form web for “Spostare il file più vecchio tramite il cron”

Non testato, buggy probabile:

 #!/bin/sh # last file in list sorted newest->oldest OLDEST=$(ls -t /application/unresponsive | tail -1) # make sure $OLDEST isn't empty string if [ -n $OLDEST ]; then # quote in case of spaces and remove directory name mv "$OLDEST" /application/inbox/$(basename "$OLDEST").txt fi 

Se vuoi lavorare con file con spazi (più robusti). Dovresti eseguire loop su di essi e utilizzare il -nt (più nuovo basato sul tempo modificato) o -ot (più vecchio) operatore di confronto con un algorithm min / max di base. Ecco un esempio di questo eccellente BashFAQ :

 files=(*) newest=${f[0]} for f in "${files[@]}"; do if [[ $f -nt $newest ]]; then newest=$f fi done 

Quindi il tuo esempio sarebbe (non testato):

 files=(/application/inbox/*) oldest=${f[0]} for f in "${files[@]}"; do if [[ $f -ot $oldest ]]; then oldest=$f fi mv "$oldest" /application/unresponsive/ done 

Imparare a non usare l'output di ls è meglio credo. Ecco un collegamento all'argomento per cui. Ma lo lascio a decidere se è vero o solo pseudo-unix-guru sciocchezze 🙂

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.