Sembra che tu abbia confuso diverse cose.
set today = 'date +%Y'
assomiglia alla sintassi di tcsh, ma anche in tcsh assegna la stringa date +%Y
alla variabile today
, non esegue il date
comando. Dato che probabilmente stai usando bash o qualche altra shell POSIX, la sintassi di un compito è today=some_value
(senza spazi attorno al segno uguale). Per eseguire il comando e assegnare il suo output alla variabile, utilizzare la sostituzione del comando :
today=$(date +%Y-%m-%d)
(Ho anche completato la specifica della data). Puoi usare i backquotes invece delle parentesi in dollari, ma è incline a essere visivamente confuso con le virgolette, e le regole per quando hai bisogno di virgolette all'interno di un comando backquoted sono piuttosto complesse e dipendenti dall'implementazione, quindi è meglio non attenersi a $(…)
(che ha lo stesso effetto con una sintassi più sana).
Hai usato &
alla fine di diversi comandi. Ciò rende il comando eseguito in background, che non è desiderato qui. Sospetto che intendessi &&
, il che significa eseguire il comando successivo solo se il primo comando ha avuto successo.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Un'alternativa all'utilizzo &&
dopo ogni comando è di avviare lo script con set -e
. Questo dice alla shell di interrompere l'esecuzione dello script non appena un comando restituisce uno stato diverso da zero (ad eccezione dei comandi nelle if
condizioni e in alcuni altri casi).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
Il tuo find
comando va bene, ma probabilmente non fa quello che intendi fare (anche se non so per certo di cosa si tratti).
Stai creando una directory con mkdir
e poi la attraversi immediatamente con find
. Ciò non sarà utile se la directory non esiste già. Intendevi creare una directory per i registri di oggi e spostare i file recenti da The_Logs
una directory chiamata ad esempio The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
O intendevi rinominare i file di registro di oggi per aggiungere il suffisso $today
? Ciò richiede il calcolo del nome file diverso per ogni file da spostare.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
Nota che ho usato -mtime
, per spostare i file in base al loro tempo di modifica, e non -atime
, che è l'ora dell'ultima lettura del file (se il tuo sistema ne tiene traccia - in caso contrario, l'atime potrebbe risalire al mtime).
:
perché allora verrà letto come host in rsync e scp. stackoverflow.com/a/37143274/390066