2016-10-04 1 views
-1

Ich versuche, ein Bash-Skript zu schreiben, das in einem Verzeichnis ausgeführt wird und Dateinamen in Verzeichnissen unterhalb des aktuellen Verzeichnisses ändert. Ich habe den Punkt erreicht, an dem ich den aktuellen Pfadnamen jeder Datei zusammen mit dem neuen Pfadnamen dieser Datei wiedergeben kann.Wie ändere ich Dateinamen im Verzeichnis von Verzeichnissen?

Ich dachte, dass alles, was ich tun müsste, ist, das Echo zu einem mv zu ändern und sie zerreißen zu lassen. Falsch! Anscheinend erlaubt es bash nicht, dass mv auf Pfadnamen operiert.

Ich wäre super für jede Beratung, wie Sie von hier aus vorgehen.

+1

Können Sie genauer zeigen, was Sie tun und was das Ergebnis ist? Es ist ein wenig mehrdeutig, was Sie mit "bash wird nicht erlauben, dass' mv' auf Pfadnamen operieren ", aber im Allgemeinen ist das keine wahre Aussage. –

+0

... eine ordnungsgemäße [MCVE] (http://StackOverflow.com/Help/Mcve), mit Code, den andere Leute laufen könnte, um den gleichen Fehler zu sehen, den Sie bekommen, wäre ideal. Zum Beispiel könnten Sie so etwas tun: 'tempdir = $ (mktemp -d test.XXXXXX); mkdir -p "$ tempdir"/{Verzeichnis1, Verzeichnis2, Verzeichnis3}/{Unterverzeichnis1, Unterverzeichnis2, Unterverzeichnis3}; wenn mv "$ tempdir/dir1" "$ tempdir/dir1new"; dann echo "Umbenannt $ tempdir/dir1 nach $ tempdir/dir1new"; else echo "$ tempdir/dir1 konnte nicht in $ tempdir/dir1new umbenannt werden"; fi', erstellen Sie alle Verzeichnisse, die Sie benötigen, um zu zeigen, was Sie tun und wie es scheitert. –

+0

Charles, Nachrichten, die ich bekomme, sind eine Reihe von: usage: mv [-f | -i | -n] [-v] Quellziel mv [-f | -i | -n] [-v] source ... directory – grok12

Antwort

0

Ich habe es jetzt funktioniert. Ich werde versuchen, den Code unten zu posten. Vielen Dank an Charles Duffy und an Gregs Wiki.

#!/bin/bash 
# I listen to many audiobooks. Sometimes the file names are 
# such that they cannot be directly loaded into iTunes because 
# the files names contain the track number before the disk number 
# so iTunes sorts all the track 01 and then all the track 02, etc rather 
# than all the tracks of disk 1 in order and then all the tracks of 
# disk 2 in order, etc. 
# 
# This script fixes this problem. The files are in sub-directories of 
# a master directory with one sub-directory for each disk and the 
# format of the files names is: 
# 
# 01 Disc 01 We Were Soldiers Once ... and Young.mp3 
# 
# The first 2 chars are the track number and it needs to be moved 
# somewhere after the disc number. This script moves it to just 
# before the .mp3. 

# You might have the same problem but a different format but you can 
# change the script. Greg's Wiki gives great Examples of Filename 
# Manipulation. Find it here: http://mywiki.wooledge.org/BashFAQ/073 
# 
#set -x 
cd " Place full path name of the master directory here " 
pwd 
for dir in * 
do 
    echo $dir 
    cd "${dir}" # Move from Master Directory to a sub-directory 
    pwd 
#ls 
    for nameext in *.mp3 
    do 
     echo $nameext 
     name=${nameext%.*} # name has the .mp3 removed 
     echo ${name} 
     tracknum=${name:0:2} # tracknum is the 1st 2 chars 
     echo ${tracknum} 
     name=${name:3} # Remove tracknum from front of name 
     echo ${name} 
     name=${name}" "${tracknum} # Add tracknum to end of name 
     echo ${name} 
     newnameext=${name}.mp3 # Add .mp3 back onto name 
     echo ${newnameext} 
     echo ${nameext}-${newnameext} 
     mv "${nameext}" "${newnameext}" 
     echo 


    done 

    cd .. # Move back to Master Directory 
done 
exit 
done 
Verwandte Themen