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

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

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

Messaggioda Lapa » lunedì 13 marzo 2017, 18:07

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.
Lubuntu 16.04 LTS su un antichissimo netbook Asus eee PC 900 e funziona!!! - Raspbian su Raspberry Pi per un paio di progettini e per il tentativo di imparare un po' di Python - Sto tentando di mettere Ubuntu su Lenovo Ideapad 100S
Avatar utente
Lapa
Prode Principiante
 
Messaggi: 188
Iscrizione: dicembre 2009

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

Messaggioda thece » martedì 14 marzo 2017, 12:10

:ciao:

Lapa Immagine 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
thece
Rampante Reduce
Rampante Reduce
 
Messaggi: 7287
Iscrizione: aprile 2007
Distribuzione: Debian 9 (Stretch) - KDE

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

Messaggioda Lapa » venerdì 17 marzo 2017, 1:01

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
Lubuntu 16.04 LTS su un antichissimo netbook Asus eee PC 900 e funziona!!! - Raspbian su Raspberry Pi per un paio di progettini e per il tentativo di imparare un po' di Python - Sto tentando di mettere Ubuntu su Lenovo Ideapad 100S
Avatar utente
Lapa
Prode Principiante
 
Messaggi: 188
Iscrizione: dicembre 2009

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

Messaggioda thece » venerdì 17 marzo 2017, 10:21

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
thece
Rampante Reduce
Rampante Reduce
 
Messaggi: 7287
Iscrizione: aprile 2007
Distribuzione: Debian 9 (Stretch) - KDE

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

Messaggioda Lapa » venerdì 17 marzo 2017, 13:29

Ancora non ci sono perché quel comando è all'interno di uno script Phython.
Lubuntu 16.04 LTS su un antichissimo netbook Asus eee PC 900 e funziona!!! - Raspbian su Raspberry Pi per un paio di progettini e per il tentativo di imparare un po' di Python - Sto tentando di mettere Ubuntu su Lenovo Ideapad 100S
Avatar utente
Lapa
Prode Principiante
 
Messaggi: 188
Iscrizione: dicembre 2009

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

Messaggioda thece » venerdì 17 marzo 2017, 13:31

Lapa Immagine ha scritto:Ancora non ci sono perché quel comando è all'interno di uno script Phython.

Allora molto probabilmente non hai bisogno del mio script. Devi reimplementare la logica del mio script all'interno dello script Python.
Avatar utente
thece
Rampante Reduce
Rampante Reduce
 
Messaggi: 7287
Iscrizione: aprile 2007
Distribuzione: Debian 9 (Stretch) - KDE

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

Messaggioda Lapa » mercoledì 5 aprile 2017, 21:38

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
Lubuntu 16.04 LTS su un antichissimo netbook Asus eee PC 900 e funziona!!! - Raspbian su Raspberry Pi per un paio di progettini e per il tentativo di imparare un po' di Python - Sto tentando di mettere Ubuntu su Lenovo Ideapad 100S
Avatar utente
Lapa
Prode Principiante
 
Messaggi: 188
Iscrizione: dicembre 2009

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

Messaggioda thece » mercoledì 5 aprile 2017, 23:15

Lapa Immagine ha scritto:ti torna come ragionamento?

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
thece
Rampante Reduce
Rampante Reduce
 
Messaggi: 7287
Iscrizione: aprile 2007
Distribuzione: Debian 9 (Stretch) - KDE

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

Messaggioda Lapa » domenica 9 aprile 2017, 20:00

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
Lubuntu 16.04 LTS su un antichissimo netbook Asus eee PC 900 e funziona!!! - Raspbian su Raspberry Pi per un paio di progettini e per il tentativo di imparare un po' di Python - Sto tentando di mettere Ubuntu su Lenovo Ideapad 100S
Avatar utente
Lapa
Prode Principiante
 
Messaggi: 188
Iscrizione: dicembre 2009

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

Messaggioda thece » lunedì 10 aprile 2017, 9:21

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
thece
Rampante Reduce
Rampante Reduce
 
Messaggi: 7287
Iscrizione: aprile 2007
Distribuzione: Debian 9 (Stretch) - KDE

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

Messaggioda BlueEyes » lunedì 10 aprile 2017, 11:49

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
BlueEyes
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1282
Iscrizione: marzo 2012

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

Messaggioda thece » lunedì 10 aprile 2017, 12:07

@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
thece
Rampante Reduce
Rampante Reduce
 
Messaggi: 7287
Iscrizione: aprile 2007
Distribuzione: Debian 9 (Stretch) - KDE

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

Messaggioda BlueEyes » lunedì 10 aprile 2017, 12:24

Grazie del chiarimento, thece. L'utilizzo che avrei voluto fare dello script era diverso, per cui chiudo qui il mio intervento. Ciao
Avatar utente
BlueEyes
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1282
Iscrizione: marzo 2012

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

Messaggioda Lapa » lunedì 24 aprile 2017, 22:39

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
Lubuntu 16.04 LTS su un antichissimo netbook Asus eee PC 900 e funziona!!! - Raspbian su Raspberry Pi per un paio di progettini e per il tentativo di imparare un po' di Python - Sto tentando di mettere Ubuntu su Lenovo Ideapad 100S
Avatar utente
Lapa
Prode Principiante
 
Messaggi: 188
Iscrizione: dicembre 2009

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

Messaggioda Lapa » martedì 25 aprile 2017, 18:47

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
Lubuntu 16.04 LTS su un antichissimo netbook Asus eee PC 900 e funziona!!! - Raspbian su Raspberry Pi per un paio di progettini e per il tentativo di imparare un po' di Python - Sto tentando di mettere Ubuntu su Lenovo Ideapad 100S
Avatar utente
Lapa
Prode Principiante
 
Messaggi: 188
Iscrizione: dicembre 2009

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

Messaggioda UbuNuovo » martedì 25 aprile 2017, 22:34

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.
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2834
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

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

Messaggioda Lapa » mercoledì 26 aprile 2017, 21:44

non ho capito :(
Lubuntu 16.04 LTS su un antichissimo netbook Asus eee PC 900 e funziona!!! - Raspbian su Raspberry Pi per un paio di progettini e per il tentativo di imparare un po' di Python - Sto tentando di mettere Ubuntu su Lenovo Ideapad 100S
Avatar utente
Lapa
Prode Principiante
 
Messaggi: 188
Iscrizione: dicembre 2009

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

Messaggioda thece » giovedì 27 aprile 2017, 10:50

:ciao:

ho corretto lo script: vedi sopra.
Avatar utente
thece
Rampante Reduce
Rampante Reduce
 
Messaggi: 7287
Iscrizione: aprile 2007
Distribuzione: Debian 9 (Stretch) - KDE

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

Messaggioda rai » giovedì 27 aprile 2017, 13:48

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.
rai
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1759
Iscrizione: maggio 2008
Località: Palermo
Distribuzione: 12.04 | 16.04

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

Messaggioda UbuNuovo » giovedì 27 aprile 2017, 14:27

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.
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2834
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

Successiva

Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: 0 utenti registrati e 6 ospiti