2017-10-25 4 views
2

Ich versuche ein Bash-Skript zu schreiben, das einen Screenshot einer Datei speichert, die ich in einem bestimmten Format aufgenommen habe. Ich möchte, dass es als Nummer gespeichert wird (zB 0001.jpeg) und wenn 0001.jpeg bereits existiert, dann mach weiter und speichere es als 0002.jpeg, und so weiter. Ich weiß, dass mit ffmpeg, wenn Sie versuchen, einen Frame aus einem Video zu speichern, Sie das Format haben, wie es so speichert: /path/to/place/%04d.ext und es würde genau das tun, was ich will. Ich habe versucht, dass mit meinem Code, so dass es wie folgt aussieht:Dateiname als fortlaufende Nummer speichern

gnome-screenshot -w -B -f /home/usr/ws/images_to_process/$%04d.jpeg 

ich auch versucht:

gnome-screenshot -w -B -f /home/usr/ws/images_to_process/$(%04d).jpeg 

und:

gnome-screenshot -w -B -f /home/usr/ws/images_to_process/%04d.jpeg 

aber das hat nicht funktioniert. Wie Sie sehen können, kann ich nicht viel Variabilität denken. Weiß jemand wie es geht?

Dank

+0

Schreiben Sie ein kleines Programm, das nach Dateien mit Namen sucht, die einem Muster entsprechen, suchen Sie die höchste Nummer, fügen Sie eine hinzu. Also, schreibe das Programm und kehre dann zum Stack-Überlauf zurück, wenn du Hilfe benötigst, um es zu beenden. Oder fehlt mir etwas? – Mort

+1

Sie müssten so etwas wie $ '(printf"% 04d "$ ((N ++)))' –

Antwort

2

Sie sind die richtige Nummer Format mit dem outfile Namen zu generieren, aber Sie müssen eine Variable und eine printf die „/home/usr/ws/images_to_process/%04d.jpeg“ bis "übersetzen /home/usr/ws/images_to_process/0001.jpeg "

Ich habe ein kleines Skript erstellt, das die Dateien mit einer Seriennummer erstellt, ohne die bereits vorhandenen Dateien zu überschreiben.

#!/bin/bash 

    FILENAME="file_%04d.txt" 
    COUNTER=0 

    #Change true for your finish condition 
    while true; do 
     target=$(printf $FILENAME $COUNTER) 

     # If not exists file $tarjet 
     # -f check if exist a file 
     # ! not condition 
     if [ ! -f $target ]; then 
       touch $target 
     fi 
     # counter ++ 
     COUNTER=$(($COUNTER + 1)) 
    done 

Sie können das ändern für "gnome-Screenshot -w -B -f $ target" "$ Ziel berühren" und die Variable "Ziel" für Sie outfile Namen. Das Ergebnisskript ist:

#!/bin/bash 

    FILENAME="/home/usr/ws/images_to_process/%04d.jpeg" 
    COUNTER=0 

    while true; do 
     target=$(printf $FILENAME $COUNTER) 
     if [ ! -f $target ]; then 
       gnome-screenshot -w -B -f $target 
     fi 
     COUNTER=$(($COUNTER + 1)) 
    done 

Ich hoffe, dass die Info nützlich war.

+1

Vielen Dank! Das hat funktioniert: D –

Verwandte Themen