Ciao a tutti, sto prendendo confidenza con lo scripting in BASH :) Praticamente il mio script fa qualcosa di molto banale:
Grazie mille a tutti, per l'aiuto. Francesco |
Ecco un comando che, dai miei test, dovrebbe fare quello che chiedi
ma ti raccomando, prima di eseguirlo, di provarlo con un "echo" davanti, tipo
in modo da verificare cosa vorrebbe cancellare.
fa un elenco dei file nella directory corrente in ordine di "modification time", dal più recente al più vecchio.
prende solo il primo file di questa lista, ovvero il più recente.
cancella tutto tranne "file", dove file è ottenuto con i comandi precedenti. grazie @enzotib! Un ultima cosa mi sapresti spiegare l'utilità del "!" dopo il comando rm ? Non l'ho trovata come opzione nel pagina del manuale. Grazie per il resto funziona alla perfezione :) 1
@francescosupercar: nella pagina di manuale di bash cerca nel paragrafo "Pattern Matching":
utilizzando il tuo comando: rm !("$(ls -t | head -n1)") ricevo il seguente messaggio di errore: ./prova.sh: riga 3: errore di sintassi vicino al token non atteso "(" ./prova.sh: riga 3: `rm !("$(ls -t | head -n1)")' A che serve quel "1" ??? 1
@francescosupercar: hai ragione, da riga di comando funziona, dato che di default sono attivati gli extglob. Invece in uno script bisogna attivarli esplicitamente, con la riga
da inserire da qualche parte prima dell'altro comando, magari all'inizio dello script una volta e per tutte. fantastico adesso va :) Grazie mille! ciao @enzotib scusa se ritorno sull'argomento ma non ho mai risolto completamente. Importando gli "extglob" ho visto che al momento in cui lo script esegue @francescosupercar: quindi il commento precedente del 10 luglio, dove hai scritto "adesso va" non era vero? @enzotib quel commento si riferiva al fatto che importando gli extglob con il comando da te suggerito (shopt) il comando @francescosupercar: mi chiedo come mai non hai detto a suo tempo che il problema non era risolto. In ogni caso, ho fatto qualche prova ed il problema a me non si presenta. lo so hai ragione @enzotib, forse per mancanza di tempo, all'epoca non ho insistito. Perdonami. Se mi aiuti ancora te ne sarei grato. Ti riporto per esteso un semplicissimo script che comunque si blocca, quindi come hai detto tu probabilmente sbaglio qualcosa nello script:
@francescosupercar: prova così, ho corretto un paio di cose:
@enzotib: fatto un semplice copia incolla del tuo script. Adesso funziona e non si blocca ma..... elimina tutti i file dalla cartella :( Non vorrei mettermi a fare uno script Python per una cosa del genere... @francescosupercar: hai mica anche delle sottodirectory nella cartella interessata? e lo script dove lo metti, nella stessa cartella? immagino di no. no non ci sono sottodirectory, solo file .tar. Lo script che eseguo si trova nella cartella "Desktop" e deve cancellare i file in cartella "Downloads" lo script come l'ho copiato dal tuo commento cancella tutti i file della cartella in cui risiede lo script (quindi Desktop) allora ho provato a premette prima della definizione della variabile un " cd /home/francesco/Downloads" così invece mi elimina tutti i file della cartella Downloads. Unica piccola modifica apportata: dopo il simbolo di "|" ho scritto "head -n2" credo che non si a questa modifica a dare problemi. Grazie ancora @francescosupercar: invece è proprio questa modifica a dare problemi, e l'avevo già corretta dal tuo script in un tuo precedente commento, quando ti avevo proposto l'ultimo script. @enzotib vorrei mantenere i due file più recenti. Comunque ho provato anche a mettere -n1 ma comunque cancella tutti i file, non ne conserva nessuno. Ma perché? Sembra che non interpreti correttamente quel "!" @francescosupercar: se anche con -n1 funziona, allora non so proprio cosa fare, dato che non sono in grado di riprodurre il problema. Rinuncio e ti prego di togliere il segno di spunta all'accettazione della risposta.
5 su 18
mostra altri 13 commenti
|
Ecco un'altra possibilità, senza l'uso degli extended glob di bash, ma con un ciclo, e quindi più lento, anche se probabilmente non ci si dovrebbe accorgere della differenza. Lo script cancella tutti i file tranne i due più nuovi, senza tener conto delle eventuali directory presenti
Grazie @enzotib. Sono finalmente riuscito a far funzionare lo script grazie a tuoi consigli.Il problema era che inserivo $ls -t | head -n1 senza anteporre le virgolette. O almeno credo che quello fosse il motivo per cui si bloccava lo script adesso funziona splendidamente. Ottima alternativa anche quella riportata nel tuo ultimo commento. Forse con il ciclo (per chi non è esperto di extglob) è molte più semplice da comprendere. Grazie ancora per la tua disponibilità e pazienza |
Segui questa domanda
Via email:Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui
Via RSS:Basi di markdown
- *corsivo* o __corsivo__
- **grassetto** o __grassetto__
- collegamento:[testo](http://url.com/ "titolo")
- immagine?
- elenco numerato: 1. Foo 2. Bar
- per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
- è supportato anche semplice HTML
Tag:
domanda posta: 09 Jul '14, 18:59
domanda visualizzata: 7,327 volte
ultimo aggiornamento: 19 Oct '14, 10:28