2016-04-04 12 views
0

Also mein spezifisches Problem ist, dass ich ein paar MP3-Alben heruntergeladen, die keine Titelnummern in ihrem Titel haben, so dass sie standardmäßig alphabetisch sortieren, was eindeutig nicht ideal ist. Ich möchte in der Lage sein, sie schnell mit einem Terminal-Befehl umzubenennen, wo ich Platzhalter benutze, um den Flaum zu sortieren. Also habe ich das aus ein paar Blickwinkeln ohne Erfolg versucht und möchte eine Anleitung.Wie ändere ich Dateinamen mit Wildcards in Bash

Auf der einen Seite möchte ich etwas wie mv *someSongN* 01-{reference original name here} versuchen. Ich bin nicht klar, in dem zweiten Argument zu mv, wie ich den ursprünglichen Dateinamen referenzieren, aber mit einer 01- vorangestellt.

Die andere Tack, die ich versuchte, war eine temporäre Bash-Variable zu erstellen, gefolgt von einem mv Befehl. Ich habe das getestet, indem ich eine Testdatei ohne Erweiterung erstellt habe - touch test. Ich fand echo und mv behandeln Sie den Platzhalter anders. So, so tun, als ob die Test-Datei ist die einzige im Verzeichnis Anfang te-- ... var=te*; echo $var gibt test zurück, aber var=te*; mv $var $var.txt gibt te*.txt zurück. Also welche Strategie verwende ich hier. Ich könnte das auch mit einem grafischen Dateimanager machen, aber ich habe das schon vorher gemacht und fand es sehr ermüdend.

+0

Haben Sie versucht, die 'find' Befehl? Sie können 'find' mit Platzhaltern ausführen und dies gibt den Dateinamen zurück, den Sie dann als Variable setzen könnten. – bluerojo

+0

Haben die Tracks [ID3 Tags] (https://en.wikipedia.org/wiki/ID3) in ihnen? – dawg

+1

thx, @bluerojo. – cfye14

Antwort

0

es als Batch-Verfahren durchführen. Erstellen Sie eine Map-Datei mit Spalten fromName toName, durchlaufen Sie ein Skript zum Umbenennen.

while read a b; do mv "$a" "$b"; done < filemap 

zu FileMap, ls zu erstellen und

ls -1 > files; paste files files > filemap; rm files 

einfügen und manuell die FileMap Datei bearbeiten, um erforderliche Präfixe hinzufügen.

+0

bekomme eine 'ungültige Option - ''' Fehler – cfye14

+0

Wo? In 'ls -1'? – karakfa

+0

ah richtig, während der 'mv' Operation. Ich habe versucht, das Trennzeichen in "Datei" zu ändern, ohne Erfolg. – cfye14

0

Hier ist ein Beispiel mit dem Befehl find

#!/bin/bash 
if [[ $1 = "" ]] ; then 
    echo "Please run the command specifying the filename you are searching for..." 
    exit 
fi 
for i in $(find . -type f -name "$1" | tr -d './') ; do 
    echo ${i} 
    mv ${i} 01-${i} 
done 

Sie würden dann laufen ...

./scriptName "*someSongN*" 
+0

Sie könnten '01' in eine andere Variable in einer Schleife umwandeln, so dass Sie 01-Dateiname 02-Dateiname 03-Dateiname usw. usw. – bluerojo

+0

haben, so dass' find' das aktuelle Verzeichnis wie './thisafile' ausgibt Gibt es einen eingebauten Weg, um das auszuschließen? Ich könnte 'cut -c 3-' zu einer Pfeife hinzufügen, aber eh – cfye14

+0

Wenn ich die Chance bekomme, werde ich upvote. Hilfreich während der ganzen Post, fand nur @ Karafkas Antwort etwas effizienter. – cfye14

0

, wenn Sie nur eine Datei verschieben möchten, können Sie (eine Inline) Funktion wie

$ mvd() { mv $1 $2$1; } 

erstellen und verwenden Sie es wie

$ mvd test.mp3 01- 

, welche die Datei test.mp3-01-test.mp3 bewegen.


von find verwenden, können Sie auf mehreren Dateien um diesen Vorgang zu tun, aber das in allen Dateien führen mit nur einem Präfix beginnen (find . -type f -name ${pattern} -exec mvd {} ${prefix}).

Eine andere Option ist die Verwendung find . -type f -name ${pattern} und iterieren darüber mit for. Dann können Sie einen Zähler implementieren:

$ i=0; for file in $(find . -type f -name ${pattern}); do mv $file $i-$file; let i+=1; done 

Grüße Fabian

+0

thx. Ich kann das nicht wirklich zum Laufen bringen, aber ich kann die Funktion für einzelne Fälle verwenden. Es scheint auch mehr Arbeit [hier] (https://stackoverflow.com/questions/4321456/find-exec-a-shell-function) nötig, um eine benutzerdefinierte Bash-Funktion mit find -exec zu verwenden. – cfye14

+0

mit der for-Schleife, wie würde ich mit der Musteränderung umgehen? – cfye14