Ich möchte verwenden find
, um Dateien in einer Reihe von Ordnern zu finden, die durch Platzhalter eingeschränkt sind, aber im Pfadnamen Leerzeichen enthalten.
Über die Befehlszeile ist dies einfach. Die folgenden Beispiele funktionieren alle.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Diese finden beispielsweise Dateien in terminal/my files/more
und tepid/my files/more
.
Ich brauche dies jedoch, um Teil eines Skripts zu sein. Was ich brauche ist so etwas:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Leider kann ich, was auch immer ich tue, keine Platzhalter und Leerzeichen in einem find
Befehl innerhalb eines Skripts mischen . Das obige Beispiel gibt die folgenden Fehler zurück (beachten Sie die unerwartete Verdoppelung des Backslashs):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Der Versuch, Anführungszeichen zu verwenden, schlägt ebenfalls fehl.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Dies gibt die folgenden Fehler zurück, nachdem die Bedeutung der Anführungszeichen ignoriert wurde:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Hier ist noch ein Beispiel.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Wie erwartet:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Jede Variation, die ich ausprobiert habe, gibt einen Fehler zurück.
Ich habe eine Problemumgehung, die möglicherweise gefährlich ist, weil zu viele Ordner zurückgegeben werden. Ich konvertiere alle Leerzeichen wie folgt in ein Fragezeichen (einstelliges Platzhalterzeichen):
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
Dies entspricht:
find te*/my?files/more -print
Dies gibt nicht nur die richtigen Ordner zurück, sondern auch die terse/myxfiles/more
, die es nicht soll.
Wie kann ich erreichen, was ich versuche? Google hat mir nicht geholfen :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
der Befehlfind -print
ausgeführt wird.