2016-07-19 656 views
2

Ich habe ein Linux-Skript, das ein Argument, das von MSDOS stammt (eigentlich DOSEMU mit MS DOS 6.22) übergeben wird. Das Argument, das übergeben wird, ist case insensitive (wie DOS keine Fälle), aber natürlich tut Linux.Linux Bash Script - Kleinbuchstaben Pfad in Argument mit tatsächlichen Dateisystempfad

ich aus der folgenden gebene Argument

/media/zigg4/vol1/database/scan/stalbans/docprint/wp23452.wpd 

zu

/media/zigg4/vol1/Database/SCAN/STALBANS/DOCPRINT/Wp23452.WPD 

zu bekommen versuche ich weiß nicht, die tatsächlichen Groß- und Kleinschreibung Pfad so muss ich es irgendwie aus dem Argument bestimmen, ist an das Skript übergeben. Ich habe absolut keine Ahnung, wo ich anfangen soll, also wird jede Hilfe sehr geschätzt.

für zusätzliche Informationen bearbeitet und Klarheit

UPDATE

Dank der Antwort von @anubhava benutzte ich die folgenden: -

#!/bin/bash 

copies=1 
if [ ! -z "$2" ]; then 
    copies=$2 
fi 

find/-readable -ipath $1 2>&1 | grep -v "Permission denied" | while IFS= read -r FILE; do 
    lpr -o Collate=True -#$copies -sP $FILE 
done 

Funktioniert prima :-)

+1

beide Pfade konvertieren in Kleinbuchstaben und dann – anubhava

+0

@anubhava Dank für Ihren Kommentar vergleichen. Vielleicht war ich in meiner Frage nicht klar. Ich kenne den zweiten Weg eigentlich nicht. das ist was ich versuche zu finden, basierend auf dem Argument an das Skript übergeben – l0ckm4

+0

Also jetzt wird dieses Skript unter Linux oder DOS laufen? – anubhava

Antwort

3

Sieverwenden könnenMöglichkeit find für Fall Pfad Anpassung ignorieren:

# assuming $arg contains path argument supplied 
find . -ipath "*$arg*" 
+2

Perfekt. Danke :-) – l0ckm4

+1

@ l0ckm4: Interessant zu beachten, dass find bietet eine Handvoll Optionen für case insensitive matching wie 'iname, ipath, iregex' und so weiter. gnu find manpage schlägt vor, '-iwholename' anstelle von' -ipath' zu verwenden –

0

Etwas wie dieses:

if [ "$(echo $real | tr A-Z a-z)" = "$lower" ]; then 
    echo "matchy" 
else 
    echo "no is matchy" 
fi 

Einige Anmerkungen:

  1. tr tut ein zu niedriger übersetzen.

  2. Das Bit $(...) platziert das Ergebnis des enthaltenen Befehls in eine Zeichenfolge.

  3. Sie könnten die auf beiden Seiten übersetzen tun, wenn Sie sich nicht sicher sind, ob Ihr „kleine“ String vertrauen kann ...

+0

Hallo Dan, Danke für die Antwort. Ich bin mir nicht sicher, ob es das ist, was ich brauche. Die erste Zeile bedeutet (für mich jedenfalls), dass ich zwei Variablen kenne; $ real und $ niedriger. Ich kenne eigentlich nur das $ low, dh das Argument, das an das Skript übergeben wurde. Es ist das $ real, das ich versuche zu finden. – l0ckm4

0

I awk für diesen (natürlich ohne Gehalt beschäftigen würde

)
#!/bin/bash 
awk -varg="$1" -vactual="/media/zigg4/vol1/Database/SCAN/STALBANS/DOCPRINT/Wp23452.WPD" 'BEGIN{ 
if (tolower(arg)==tolower(actual)){ 
printf "Argument matches actual filepath\n" 
} 
}' 

Führen Sie das Skript als

./script "/media/zigg4/vol1/database/scan/stalbans/docprint/wp23452.wpd" 
+0

Hallo sjsam, Vielen Dank für Ihre Antwort. Es scheint, dass meine ursprüngliche Frage nicht klar war, also entschuldige ich mich für die Verschwendung Ihrer Zeit. Ich kenne den wirklichen Pfad nicht nur eine Groß-und Kleinschreibung Version davon. Es ist die Fall-sensitive Version, die ich versuche zu erhalten. – l0ckm4