2017-04-04 3 views
1

Ich mache bereits eine for loop in alle meine Verzeichnisse beginnend mit abcd und es funktioniert. Aber wenn ich andere Dateien oder Sachen im Wurzelverzeichnis habe, stürzt es nach der ersten Schleife ab.Bash für die Schleife alle Verzeichnisse und führen Befehl innerhalb

dir_1="./some/path1" 
dir_2="./some/path2" 
dir_3="./some/path3" 

for f in ./abcd*; 
    do  
     [ -d $f ] && cd "$f" && echo I am inside $f 

     find $dir_1 -name something*.txt -exec cp {} $dir_3 \; 
     find $dir_2 -name another*.txt -exec cp {} $dir_3 \; 

     cd "$dir_3" 
     # do some other stuff here 
     cd ../../..  
    done; 

könnte jemand mir helfen, es zu reparieren?

Antwort

3

Der Glob selbst kann auf Verzeichnisse beschränkt werden, und an dieser Stelle können Sie einfach zur nächsten Iteration springen, wenn cd fehlschlägt.

for f in ./abcd*/; 
do  
    pushd "$f" || continue 

    find "$dir_1" -name something*.txt -exec cp {} "$dir_3" \; 
    find "$dir_2" -name another*.txt -exec cp {} "$dir_3" \; 

    pushd "$dir_3" 
    # do some other stuff here 
    popd 
    popd 
done 

pushd und popd make Verzeichnisse zu ändern und einfacher Wechsel zurück. (Da Sie nichts zwischen den beiden popd s tun, können Sie die zweite pushd durch eine einfache cd ersetzen und die entsprechende popd fallen lassen.)

Verwandte Themen