[Risolto] Comandi da terminale: Salvare un file "nome_n+1"

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Lapa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 384
Iscrizione: mercoledì 30 dicembre 2009, 17:01

[Risolto] Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da Lapa »

Salve a tutti,

Ho una webcam collegata ad un sensore di luminosità, scatta una foto ogni 10 minuti solo se c'è luce. Qual'è il comando da terminale per salvare il file .jpg in automatico in una cartella con n° progressivo? Mi spiego meglio se l'ultima foto è stata salvata con nome "foto0023" qual è l'istruzione per far sì che la al successiva foto sia nominata "foto0024"? Cioè foto0023+0001?

Grazie per l'attenzione e per l'aiuto

Saluti

LaPa
Ultima modifica di Lapa il sabato 29 aprile 2017, 15:19, modificato 1 volta in totale.
Eterno imbranato su Ubuntu Linux e .... in tantissime altre cose :D
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12946
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da thece »

:ciao:
Lapa [url=http://forum.ubuntu-it.org/viewtopic.php?p=4965847#p4965847][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: Qual'è il comando da terminale per salvare il file .jpg in automatico in una cartella con n° progressivo?
Non esiste alcun comando del genere. Occorre costuirsi uno script che vada a salvare il file con il nome opportuno.

Tempo fa avevo scritto questo scriptino

(script corretto)

Codice: Seleziona tutto

#!/bin/bash

# Crea un file con pattern $BASE_PATH/$FILE_PREFIX$FILE_NUMBER$FILE_EXTENSION (Es: /temp/SOMETHING00001.TXT)

BASE_PATH="/temp"
FILE_PREFIX="SOMETHING"
FILE_NUMBER="1"
FILE_EXTENSION=".TXT"
FILE_NAME=""

if [[ ! -d "$BASE_PATH" ]]; then
        echo "[ERR] Directory '$BASE_PATH' doesn't exists"
        exit 0
fi

FILE_NUMBER=$(ls -1rv $BASE_PATH/$FILE_PREFIX*$FILE_EXTENSION 2> /dev/null | head -n 1 | grep -o '[[:digit:]]*')
FILE_NUMBER=$(echo $FILE_NUMBER | sed 's/^0*//')
FILE_NUMBER=$(($FILE_NUMBER + 1))
FILE_NAME="$(printf "%s%05d%s" $FILE_PREFIX $FILE_NUMBER $FILE_EXTENSION)"

# Parte da cambiare ... qui esegue il comando touch
touch "$BASE_PATH/$FILE_NAME"

exit 0
Ultima modifica di thece il giovedì 27 aprile 2017, 10:49, modificato 1 volta in totale.
Avatar utente
Lapa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 384
Iscrizione: mercoledì 30 dicembre 2009, 17:01

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da Lapa »

Ho cambiato il codice così per adattarlo al mio caso, va bene?

Codice: Seleziona tutto

#!/bin/bash

# Crea un file con pattern $BASE_PATH/$FILE_PREFIX$FILE_NUMBER$FILE_EXTENSION (Es: /temp/SOMETHING00001.TXT)

BASE_PATH="/mnt/usbhd/PhotoOfPlants"
FILE_PREFIX="Foto"
FILE_NUMBER="1"
FILE_EXTENSION=".jpg"
FILE_NAME=""

if [[ ! -d "$BASE_PATH" ]]; then
        echo "[ERR] Directory '$BASE_PATH' doesn't exists"
        exit 0
fi

FILE_NUMBER=$(ls -1rv $BASE_PATH/$FILE_PREFIX*$FILE_EXTENSION 2> /dev/null | head -n 1 | grep -o '[[:digit:]]*')
FILE_NUMBER=$(($FILE_NUMBER + 1))
FILE_NAME="$(printf "%s%05d%s" $FILE_PREFIX $FILE_NUMBER $FILE_EXTENSION)"

# Parte da cambiare ... qui esegue il comando touch
touch "$BASE_PATH/$FILE_NAME"

exit 0

però io dovrei inserire tutte queste istruzioni in un comando su terminale e non ho capito come fare, il comando è il seguente:

raspistill -o "IlCodiceSuggeritoDaTe"

Come faccio ad inserirlo nel comando?

Grazie

LaPa
Eterno imbranato su Ubuntu Linux e .... in tantissime altre cose :D
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12946
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da thece »

Lapa ha scritto: però io dovrei inserire tutte queste istruzioni in un comando su terminale e non ho capito come fare, il comando è il seguente:

raspistill -o "IlCodiceSuggeritoDaTe"

Come faccio ad inserirlo nel comando?
Non devi inserire lo script nel comando, devi fare l'esatto contrario: inserire il comando nello script

(script corretto)

Codice: Seleziona tutto

#!/bin/bash

# Crea un file con pattern $BASE_PATH/$FILE_PREFIX$FILE_NUMBER$FILE_EXTENSION (Es: /temp/SOMETHING00001.TXT)

BASE_PATH="/mnt/usbhd/PhotoOfPlants"
FILE_PREFIX="Foto"
FILE_NUMBER="1"
FILE_EXTENSION=".jpg"
FILE_NAME=""

if [[ ! -d "$BASE_PATH" ]]; then
		echo "[ERR] Directory '$BASE_PATH' doesn't exists"
		exit 0
fi

FILE_NUMBER=$(ls -1rv $BASE_PATH/$FILE_PREFIX*$FILE_EXTENSION 2> /dev/null | head -n 1 | grep -o '[[:digit:]]*')
FILE_NUMBER=$(echo $FILE_NUMBER | sed 's/^0*//')
FILE_NUMBER=$(($FILE_NUMBER + 1))
FILE_NAME="$(printf "%s%05d%s" $FILE_PREFIX $FILE_NUMBER $FILE_EXTENSION)"

raspistill -o "$BASE_PATH/$FILE_NAME"

exit 0
Poi devi rendere eseguibile lo script

Codice: Seleziona tutto

chmod +x SCRIPT.sh
Quindi richiamare lo script per scattare le foto con la Raspicam

Codice: Seleziona tutto

./SCRIPT.sh
Ultima modifica di thece il giovedì 27 aprile 2017, 10:53, modificato 1 volta in totale.
Avatar utente
Lapa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 384
Iscrizione: mercoledì 30 dicembre 2009, 17:01

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da Lapa »

Ancora non ci sono perché quel comando è all'interno di uno script Phython.
Eterno imbranato su Ubuntu Linux e .... in tantissime altre cose :D
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12946
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da thece »

Allora molto probabilmente non hai bisogno del mio script. Devi reimplementare la logica del mio script all'interno dello script Python.
Avatar utente
Lapa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 384
Iscrizione: mercoledì 30 dicembre 2009, 17:01

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da Lapa »

Forse potrei semplicemente inserire nello script di Python la condizione: se luminosità > di tot valore lancia path/SCRIPT.sh

ti torna come ragionamento?

grazie dei consigli

Saluti

LaPa
Eterno imbranato su Ubuntu Linux e .... in tantissime altre cose :D
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12946
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da thece »

E' una soluzione, a mio avviso brutta, ma è una soluzione e ovviamente sei libero di perseguirla.
Per raggiungere il tuo scopo, vista la banalità algoritmica, il mio suggerimento è di implementare lo script interamente in Python.
Avatar utente
Lapa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 384
Iscrizione: mercoledì 30 dicembre 2009, 17:01

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da Lapa »

Non so niente di programmazione e non riesco a capire perché la soluzione la consideri brutta, detto questo potrei nello script di Python inserire il comando per aprire il terminale metterci dentro il contenuto di SCRIPT.sh. In questa maniera sarebbe meno brutta?

Grazie

Saluti

LaPa
Eterno imbranato su Ubuntu Linux e .... in tantissime altre cose :D
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12946
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da thece »

E' una pura questione (personale?) di stile di programmazione: mi sembra del tutto fuori luogo suddividere uno script di poche decine di righe, che deve andare a risolvere un problema semplice, in più script e per giunta scritti in linguaggi di programmazione diversi. La manutenzione dello script sarebbe inutilmente complessa. Ma, ti ripeto, questo è solo il mio punto di vista (*)

Visto che affermi di non sapere nulla di programmazione, lascia perdere quello che ti ho detto più sopra e fai come tu ritieni più opportuno, alla fine basta risolvere o no?
Certo che però il tuo non voler nemmeno provarci a modificare lo script Python mi sembra in contrasto con quanto riportato nella tua firma: "... e per il tentativo di imparare un po' di Python ..."



(*) a chi prudessero le dita: non tiriamo fuori il discorso "modularizzazione del codice". Non mi sembra questo il caso
Avatar utente
BlueEyes
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1330
Iscrizione: giovedì 15 marzo 2012, 14:08

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da BlueEyes »

Discussione molto interessante. Per cui chiedo all'autore dello script bash (thece) se è corretta la mia interpretazione dello stesso. Altrimenti lo modifico, prima di accingermi a provarlo. I miei commenti sono inseriti dentro il seguente codice. Grazie anticipate per l'help.

Codice: Seleziona tutto

#!/bin/bash
# ---------------- FotoAppend.sh ---------- script prelevato da Ubuntu Forum 
#       (Programmazione, autore thece) [10-04-17] e riadattato alle mie cartelle ----------

# Crea un file con pattern $BASE_PATH/$FILE_PREFIX$FILE_NUMBER$FILE_EXTENSION (Es: /temp/SOMETHING00001.TXT)

#BASE_PATH="/mnt/usbhd/PhotoOfPlants"
BASE_PATH="/home/alfabeta/Scrivania" # FotoAppend.sh si trova in questa directory di lavoro
FILE_PREFIX="Foto"
FILE_NUMBER="23" # l'ultima mia foto 23.jpg dentro il BASE_PATH. 
                 # Vorrei rinominare altri tre file (aa.jpg, bb.jpg, cc.jpg) che si trovano sempre qui
                 # Obiettivo atteso dallo script: ottenere le 4 foto con il nome così modificato:
                 # Foto-23.jpg, Foto-24.jpg, Foto-25.jpg, Foto-26.jpg
                 # --------- E' corretta questa interpretazione dello script?  -------- 
FILE_EXTENSION=".jpg"
FILE_NAME=""

if [[ ! -d "$BASE_PATH" ]]; then
      echo "[ERR] Directory '$BASE_PATH' doesn't exists"
      exit 0
fi

FILE_NUMBER=$(ls -1rv $BASE_PATH/$FILE_PREFIX*$FILE_EXTENSION 2> /dev/null | head -n 1 | grep -o '[[:digit:]]*')
FILE_NUMBER=$(($FILE_NUMBER + 1))
FILE_NAME="$(printf "%s%05d%s" $FILE_PREFIX $FILE_NUMBER $FILE_EXTENSION)"

raspistill -o "$BASE_PATH/$FILE_NAME"

exit 0
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12946
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da thece »

@BlueEyes

io ti rispondo qui, ma per eventuali altri messaggi apri una tua discussione, linkando questa, altrimenti si genera confusione.

No, credo che tu abbia inteso male.

Lo script può essere memorizzato ovunque.

La directory $BASE_PATH è la directory che conterrà i (nuovi) file, denominati secondo lo schema: $FILE_PREFIX$FILE_NUMBER$FILE_EXTENSION. Quindi seguendo l'esempio del mio commento

Codice: Seleziona tutto

/temp/SOMETHING00001.TXT
/temp/SOMETHING00002.TXT
/temp/SOMETHING00003.TXT
/temp/SOMETHING00004.TXT
/temp/SOMETHING00005.TXT
...
Lo script non rinomina i file (vecchi) eventualmente già presenti nella directory
Avatar utente
BlueEyes
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1330
Iscrizione: giovedì 15 marzo 2012, 14:08

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da BlueEyes »

Grazie del chiarimento, thece. L'utilizzo che avrei voluto fare dello script era diverso, per cui chiudo qui il mio intervento. Ciao
Avatar utente
Lapa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 384
Iscrizione: mercoledì 30 dicembre 2009, 17:01

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da Lapa »

Salve, non ho risolto il problema: mi salva la foto fino al file "foto00008.jpg" la "foto00009.jpg" non riesce a produrla. Su terminale mi appare un errore del tipo "numero ottale non valido". cioè sembrerebbe che funzioni ad ottali invece che a decimali pertanto non scrive "foto00009.jpg" come mai? Come risolvo?

Grazie

Saluti

LaPa
Eterno imbranato su Ubuntu Linux e .... in tantissime altre cose :D
Avatar utente
Lapa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 384
Iscrizione: mercoledì 30 dicembre 2009, 17:01

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da Lapa »

Per la precisione, in seguito al tentativo di creazione del salvataggio del file 00009 il terminale risponde:

"/home/pi/Desktop/ScattaFotoPianta+1.sh: riga 17: 00008: valore troppo grande per la base (il token dell'errore è "00008")
/home/pi/Desktop/ScattaFotoPianta+1.sh: riga 18: printf: 00008: numero ottale non valido"

e non lo scrive


grazie

Saluti

LaPa
Eterno imbranato su Ubuntu Linux e .... in tantissime altre cose :D
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da UbuNuovo »

Non ho letto tutta la discussione, se fai un incremento o una somma devi farla con il numero "pulito", i numeri preceduti da zero sono considerati ottali.
Gli zero di riempimento li aggiungi con printf.
Salva l'Ucraina! 🇺🇦
Avatar utente
Lapa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 384
Iscrizione: mercoledì 30 dicembre 2009, 17:01

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da Lapa »

non ho capito :(
Eterno imbranato su Ubuntu Linux e .... in tantissime altre cose :D
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12946
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da thece »

:ciao:

ho corretto lo script: vedi sopra.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da rai »

oppure, invece di stare a cancellare tutti gli zero iniziali si può imporre di interpretare il numero in base decimale

Codice: Seleziona tutto

~$ FILE_NUMBER=0000009
~$ echo $(( $FILE_NUMBER + 1 ))
bash: 0000009: valore troppo grande per la base (il token dell'errore è "0000009")
~$ echo $(( 10#$FILE_NUMBER + 1 ))
10
~$
EDIT corretto un errore di copia/incolla che mi è stato gentilmente fatto notare
Ultima modifica di rai il giovedì 27 aprile 2017, 15:13, modificato 1 volta in totale.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Comandi da terminale: Salvare un file "nome_n+1"

Messaggio da UbuNuovo »

Intendevo dire che non puoi fare, come hai detto:
foto0023+0001
devi pulire la stringa in modo da fare la somma con i soli numeri significativi, senza gli zero davanti.

Codice: Seleziona tutto

23+1
Poi puoi aggiungere il prefisso e gli zero davanti con printf, come ti ha fatto vedere Thece.
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: nik1404 e 13 ospiti