Я хочу использовать, find
чтобы найти файлы в наборе папок, ограниченных подстановочными знаками, но где есть пробелы в имени пути.
Из командной строки это легко. Следующие примеры все работают.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Они найдут файлы, например, terminal/my files/more
и tepid/my files/more
.
Тем не менее, мне нужно, чтобы это было частью сценария; мне нужно что-то вроде этого:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
К сожалению, что бы я ни делал, я не могу смешивать подстановочные знаки и пробелы в find
команде внутри скрипта. В приведенном выше примере возвращаются следующие ошибки (обратите внимание на неожиданное удвоение обратной косой черты):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Попытка использовать кавычки также терпит неудачу.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Это возвращает следующие ошибки, игнорируя значение кавычек:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Вот еще один пример.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Как и ожидалось:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Каждый вариант, который я пробовал, возвращает ошибку.
У меня есть обходной путь, который потенциально опасен, потому что он возвращает слишком много папок. Я преобразую все пробелы в знак вопроса (односимвольный символ) следующим образом:
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
Это эквивалент:
find te*/my?files/more -print
Это возвращает не только правильные папки, но также terse/myxfiles/more
, что это не должно.
Как я могу достичь того, что я пытаюсь сделать? Гугл мне не помог :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
командаfind -print
выполняется.