我想用来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
被执行。