如何通过locate的PRUNEPATHS排除带空格的目录?

如何通过locate的PRUNEPATHS排除带空格的目录?

我想排除 NTFS 挂载上的某些 Windows 文件夹被locate.我熟悉PRUNEPATHS中的语法/etc/updatedb.conf。它是一个以空格分隔的目录名称列表。

我的问题是我想排除本身包含空格的目录(例如Program Files (x86))。

我尝试过反斜杠转义,但没有用。

答案1

updatedb.sh175行给出了提示:

PRUNEREGEX=`echo $PRUNEPATHS|sed -e 's,^,\\\(^,' -e 's, ,$\\\)\\\|\\\(^,g' -e 's,$,$\\\),'`

在那里$PRUNEPATHS像纯文本一样处理,“ ”字符被替换并且不可能转义。

为了确保第 175 行中存在空格,您必须在不明确提及的情况下表示它。我知道的最好的方法是使用\s,这意味着空白字符:

PRUNEPATHS='/path/to/Program\sFiles\s(x86)'

(这还包括制表符和换行符,但在这种情况下对您来说没问题。)

另一种方法是直接设置$PRUNEREGEX,如updatedb第 175 行所示:

PRUNEREGEX='\(^/path/to/Program Files (x86)$\)'

您可以使用 分隔多个路径\|,因此空间不再是问题:

PRUNEREGEX='\(^/path/to/Program Files (x86)$\)\|\(^/foo/bar$\)'

相关内容