Chcę używać find
do znajdowania plików w zestawie folderów ograniczonych symbolami wieloznacznymi, ale tam, gdzie w nazwie ścieżki są spacje.
Z linii poleceń jest to łatwe. Wszystkie poniższe przykłady działają.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Znajdą one na przykład pliki terminal/my files/more
i tepid/my files/more
.
Potrzebuję tego jednak, aby był częścią skryptu; potrzebuję czegoś takiego:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Niestety, cokolwiek robię, nie jestem w stanie mieszać symboli wieloznacznych i spacji w find
poleceniu w skrypcie. Powyższy przykład zwraca następujące błędy (zwróć uwagę na nieoczekiwane podwojenie odwrotnego ukośnika):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Próba użycia cytatów również się nie udaje.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Zwraca następujące błędy, ignorując znaczenie cudzysłowów:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Oto jeszcze jeden przykład.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Zgodnie z oczekiwaniami:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Każda odmiana, którą próbowałem, zwraca błąd.
Mam obejście, które jest potencjalnie niebezpieczne, ponieważ zwraca zbyt wiele folderów. Konwertuję wszystkie spacje na znak zapytania (jednoznakowy symbol wieloznaczny) w następujący sposób:
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
Jest to odpowiednik:
find te*/my?files/more -print
Zwraca to nie tylko prawidłowe foldery, ale także terse/myxfiles/more
, czego nie powinno.
Jak mogę osiągnąć to, co próbuję zrobić? Google mi nie pomogło :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
wykonanie poleceniafind -print
.