在 UNIX 系统上,“locate”会在数据库中搜索具有所选名称的文件或具有所选名称的文件夹中的文件。如何使用locate仅输出文件夹而不输出文件?
答案1
实际上,如果您使用该选项并且不介意它吐出与您寻找的目录同名的文件,它就具备了locate
所需的功能。“行尾”位置标记可以完成这项工作:--regexp
locate -r '/dirname$'
locate
--ignore-case
如果您想要的话,也会支持。
答案2
locate
本身无法为您完成此操作。因此,UNIX 的方法是过滤输出locate
:
locate --null something | xargs -r0 sh -c 'for i do [ -d "$i" ] && printf "%s\n" "$i"; done' sh {} +
答案3
为什么不使用 find 命令?
find . -name YOUR_SEARCH_NAME -type d
答案4
将 Oliver Salzburg 的简洁台词放入您的.bashrc
:
# locate directories:
# -------------------
locd () {
locate -0 -b -A "$@" | xargs -0 -I {} bash -c '[ -d "{}" ] && echo "{}"'
}
然后您可以locd something
在每次想要定位目录时输入该命令。
部分细分:
-0
为包含空格或换行符的文件名提供更好的支持。-b
或者--basename
仅匹配路径的最后一部分。-A
匹配所有输入,因此如果您提供多个参数,则所有参数都必须存在。