Я хочу використовувати 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
, чого не слід.
Як я можу досягти того, що намагаюся зробити? Google мені не допоміг :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
до виконання командиfind -print
.