2016-04-15 6 views
1

Ich habe ein Verzeichnis namens Assets, die im weiteren eine Reihe von Verzeichnissen hat.Iterieren über Verzeichnis und Ersetzen von '+' von einem Dateinamen zu '_' in Bash

user_images 
|-content_images 
    |-original 
    |-cropped 
    |-resize 
|-gallery_images 
|-slider_images 
|-logo 

können diese Ordner haben Ordner wie original, cropped, resize. Und diese Ordner werden weiter Bilder haben. Diese Bilder werden etwa so genannt: – 14562345+Image.jpeg. Ich muss alle Bilder/Dateien ersetzen, die + bis _ haben.

for f in ls -a; 
do 
    if [[ $f == ​+​ ]] 
     then     
     cp "$f" "${f//+/_}" 
     fi 
done 

Ich konnte dies im aktuellen Verzeichnis tun. Aber ich muss das zu anderen vielen anderen Verzeichnissen wiederholen. Wie kann ich das machen?

Antwort

2

Sie diese Schleife verwenden können find in einem Prozess Substitution mit:

cd user_images 

while IFS= read -r -d '' f; do 
    echo "$f" 
    mv "$f" "${f//+/_}" 
done < <(find . -name '*+*' -type f -print0) 
+0

Hat nicht funktioniert. :/ – nirvair

+0

Es zeigt alle th-Dateien im Verzeichnis an, aber die Datei wird nicht umbenannt. – nirvair

+0

Ich meinte es macht nichts. – nirvair

0

Mit find -exec:

find user_images -type f \ 
-exec bash -c '[[ $0 == *+* ]] && mv "$0" "${0//+/_}"' {} \; 

Beachten Sie, dass diese verwendet mv und nicht cp wie die Frage lautet: "umbenennen", aber Ersetzen Sie einfach durch cp, wenn Sie die ursprünglichen Dateien behalten möchten.

Die bash -c wird benötigt, um die Dateinamen bearbeiten zu können, andernfalls könnten wir {} direkt in der -exec Aktion verwenden.

0

werden die folgenden rekursiv ausgeführt und werden alle Dateien ersetzen + mit einem _ umbenennen:

find . -name '*+*' -type f -execdir bash -c 'for f; do mv "$f" "${f//+/_}"' _ {} + 

Beachten Sie die Verwendung von -execdir:

Wie -exec, aber die angegebene Befehl Führen Sie aus dem Unterverzeichnis mit der übereinstimmenden Datei, die normalerweise nicht das Verzeichnis ist, in dem Sie suchen gefunden - Zitiert von man find.

Das schützt uns im Fall von Verzeichnisnamen, die dem Muster entsprechen, das Sie nicht umbenennen möchten.

Verwandte Themen