2017-02-12 3 views
4

Ich habe ein Bash-Skript, das gut funktioniert, nur Verzeichnisse umbenennen, die ein Kriterium entsprechen.Umbenennen von Verzeichnissen basierend auf einem Muster in Bash

for name in *\[*\]\ -\ *; do 
    if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then 
    mv "$name" "${name#* - }" 
    fi 
done 

Zeit, wenn das Verzeichnis wie folgt aussieht:

user1 [files.sentfrom.com] - Directory-Subject 

Es das Verzeichnis umbenennt und nur das Verzeichnis schauen, wie

Directory-Subject (this could have different type of text) 

Wie kann ich das Skript/Suchkriterien ändern, um jetzt Suche nach

www.ibm.com - Directory-Subject 

und das Verzeichnis umbenennen und nur das Verzeichnis zu

Directory-Subject 

Antwort

0

Sie Ihren Code so schreiben könnte, so dass es sowohl die Fälle umfasst:

for dir in *\ -\ *; do 
    [[ -d "$dir" ]] || continue # skip if not a directory 
    sub="${dir#* - }" 
    if [[ ! -e "$sub" ]]; then 
    mv "$dir" "$sub" 
    fi 
done 

Bevor das Skript ausgeführt wird:

$ ls -1d */ 
user1 [files.sentfrom.com] - Directory-Subject/ 
www.ibm.com - Directory-Subject 

Nachher: ​​

$ ls -1d */ 
Directory-Subject/ 
www.ibm.com - Directory-Subject/ # didn't move because directory existed already 
0

Eine einfache Antwort wäre *\[*\]\ -\ * zu *\ -\ *

for name in *\ -\ *; do 
    if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then 
    mv "$name" "${name#* - }" 
    fi 
done 

Weitere Informationen zu ändern, bitte glob und wildcards

lesen
Verwandte Themen