Ich habe ein Skript, das find
verwendet, um nach Dateien zu suchen, die Benutzereingaben entsprechen. Im Grunde gibt der Benutzer so etwas wie test*
ein und es soll alle passenden Dateien finden.Wie wird ein Dateiname mit eingebetteten Wildcards übergeben, um ohne Beschränkung auf lokal gefundene Dateien zu finden?
Das Problem, das ich habe, ist, dass, wenn es eine Datei im aktuellen Verzeichnis gibt, das dem vom Benutzer eingegebenen Dateinamenmuster entspricht, wird nur nach dieser Datei gesucht. Das heißt, wenn der Benutzer fred*
eingibt und sich im aktuellen Verzeichnis eine Datei namens frederica
befindet, findet das Skript nur Dateien namens frederica. Hier ist ein Beispiel für das Problem:
>ls
test1 test2 test3 test4 test5 words
>tmp()
> {
> my_file="$1"
> find . -iname "$my_file"
> }
>tmp test*
./test1
>
Wenn ich tmp test*
eingeben, würde ich erwarten, dass es die fünf Dateien test1 durch test5 zurückzukehren. Stattdessen gibt es nur die erste zurück. Wenn ich beispielsweise nach /
suchte, würde es immer nur Dateien mit dem Namen test1 aus jedem Verzeichnis zurückgeben.
Das eigentliche Skript ist natürlich komplexer, und ich habe eine Workaround mit einer "Wildcard-Option" entwickelt (z. B. -w 1
bedeutet, führende und nachfolgende Sterne, etc.), aber ich möchte wirklich nur in der Lage sein um den Benutzer einen Dateinamen mit einem Platzhalter eingeben zu lassen.
Vielen Dank im Voraus
Warum versuchen Sie nicht '' $ my_file'' oder auch nur '$ my_file' –
Das scheint nicht zu helfen - setzen Sie einfache Anführungszeichen um' $ my_file' im Befehl find führt dazu, nichts während zu finden keine Anführungszeichen ergeben die gleichen Ergebnisse wie Anführungszeichen. –
Dies ist sehr eng verwandt mit [Stop Shell Wildcard-Zeichenerweiterung?] (Http://stackoverflow.com/questions/11456403/stop-shell-wildcard-character-expansion). –