2016-08-03 35 views
1

Ich habe Bilder von Dateien, dass, wenn sie erstellt haben diese Art von Dateinamen:Wie fügt führende Nullen auf sequentielle Dateinamen

Name der Datei-1.jpg Name der Datei-2.jpg Name file-3.jpg Name der Datei-4.jpg ..etc

Dies verursacht Probleme beim Sortieren zwischen Windows und Cygwin Bash. Wenn ich diese Dateien in Cygwin Bash verarbeite, werden sie wegen der Unterschiede in der Sortierung zwischen Windows-Dateisystem und Cygwin Bash in der falschen Reihenfolge verarbeitet. Wenn die Dateien jedoch manuell umbenannt und mit führenden Nullen nummeriert werden, ist dieses Problem kein Problem. Wie kann ich mit Bash diese Dateien automatisch umbenennen, damit ich sie nicht manuell verarbeiten muss? Ich möchte meinem Bash-Skript einige Codezeilen hinzufügen, um sie umzubenennen und die führenden Nullen hinzuzufügen, bevor sie vom Rest des Skripts verarbeitet werden.

Da ich dieses Bash-Skript austauschbar zwischen Windows Cygwin und Mac verwende, möchte ich etwas, das in beiden Umgebungen funktioniert, wenn möglich. Außerdem haben alle Dateien Namen mit Leerzeichen.

+0

Sind alle Dateien im selben Ordner? Auch welche cygwin (cygcheck.exe -V) und welche Bash-Version auf Mac? – sjsam

+1

Hoppla, Sie haben vergessen, Ihren Code zu posten. StackOverflow hilft Leuten, ihren Code zu reparieren. Es ist kein kostenloser Kodierungsdienst. Jeder Code ist besser als gar kein Code. Ich bin sicher, ich habe ähnliche Probleme gesehen, haben Sie nach Lösungen gesucht. Verwende eines davon und aktualisiere dein Q, um anzuzeigen, wo du Probleme hast. Viel Glück. – shellter

Antwort

1

Man könnte so etwas wie folgt verwenden:

files="*.jpg" 
regex="(.*-)(.*)(\.jpg)" 
for f in $files 
do 
    if [[ "$f" =~ $regex ]] 
    then 
     number=`printf %03d ${BASH_REMATCH[2]}` 
     name="${BASH_REMATCH[1]}${number}${BASH_REMATCH[3]}" 
     mv "$f" "${name}" 
    fi 
done 

Setzen Sie, dass in einem Skript, wie rename.sh und führen Sie, dass in dem Ordner, in dem Sie die Dateien verdeckte wollen. Ändern Sie nach Bedarf ...

Schamlos von hier zerrissen:
Capturing Groups From a Grep RegEx

und hier:
How to Add Leading Zeros to Sequential File Names

+0

Vielen Dank! Klappt wunderbar! –

0
#!/bin/bash 

#cygcheck (cygwin) 2.3.1 
#GNU bash, version 4.3.42(4)-release (i686-pc-cygwin) 

namemodify() 
{ 
bname="${1##*/}" 
dname="${1%/*}" 
mv "$1" "${dname}/00${bname}" # Add any number of leading zeroes. 
} 

export -f namemodify 
find . -type f -iname "*jpg" -exec bash -c 'namemodify "$1"' _ {} \; 

Ich hoffe, dass dies nicht auf Mac auch :) viel Glück brechen

+1

Das ist cool, wenn Sie einstellige Dateinamen haben, aber wenn Sie Dinge wie "Name von Datei-10.jpg" bekommen, werden Sie eine Umwandlung in "Name der Datei-0010.jpg" statt der angenommenen " Name der Datei-010.jpg ": / –