2016-07-12 12 views
1

Ich brauche den vollständigen Pfad eines Ordners (falls vorhanden), die bestimmte Namen entsprechen. Es gibt immer einen Ordner, der dem Namen entspricht. ZB: Code muss finden, falls vorhanden, den Ordner mit diesen möglichen Namen:Finden Sie eine Filiale in einer Variablen den vollständigen Pfad eines Ordners, wenn in BASH

/home/user/myfolder 
/home/user/myfolder_aaa 
/home/user/myfolder_bbb 
/home/user/myfolder_ccc 

Aber es darf nicht übereinstimmen andere „ähnlich“ -Ordner, wie

/home/user/myfolder_xxx 

Und wenn die Ordner existiert Ich muss in einer Variablen den vollständigen Pfad speichern So etwas passt auch auch zu unerwünschten Fällen und versucht nicht den vollständigen Pfad:

Antwort

0

Sie können find mit regex verwenden:

find ./home/user -regextype posix-extended -type f -regex '.*/myfolder(_(aaa|bbb|ccc))?$' 

die Ergebnisse in einem Array zu speichern (wie Sie Leerzeichen in diesen Ordnernamen haben nicht angezeigt):

arr=() 
while IFS= read -r f; do 
    arr+=("$f") 
done < <(find /home/user -regextype posix-extended -type f -regex '.*/myfolder(_(aaa|bbb|ccc))?$' -print0) 

# check array contents 
declare -p arr 
+0

mit diesem Befehl denke ich myfolder_yyy übereinstimmt und das ist nicht korrekt. Ich muss nur diese 4 Fälle übereinstimmen -> Myfolder, Myfolder_aaa, MyFolder_Bbb, MyFolder_ccc – user3472065

+0

ok Überprüfen Sie meine aktualisierte Antwort jetzt – anubhava

+1

Die aktualisierte Antwort würde auch 'myfolder_aaa_aaa' entsprechen. – tripleee

1

Mit einem ziemlich kleinen Anzahl der Möglichkeiten und nur ein Zielverzeichnis dann wäre das genug:

top_level='myfolder' 

for end in '' '_aaa' '_bbb' '_ccc' 
do 
    name=$top_level$end 
    if [[ -d $name ]] 
    then 
     var="$name" 
     break 
    fi 
done 

echo "$var found"