Mac Terminal“ find”命令:结果输出中的双斜杠是什么意思?


9

我使用find-command搜索大型和嵌套的目录结构。

在结果输出中,有时会包含双斜杠(//)。

示例(在“下载”之后):

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf

我首先认为它将标记当前的工作目录。但是事实并非如此。

这个双斜杠是什么意思?

通常我将结果复制到剪贴板,然后更改为查找程序。然后“ shift” +“ command” +“ g”,并将路径(直到文件)粘贴到框中。这样就可以打开包含目录。

工作良好。但是我必须手动删除双斜线。

因此:如何避免呢?


2
请注意,您不必删除双斜杠。双斜杠仅在路径的开头,并且仅在正好是两个斜杠时才是特殊的。中间末尾有多个斜杠,或者比开始处的正好多两个斜杠完全等于一个斜杠。这由POSIX / SUS规范保证。
约尔格W¯¯米塔格

Answers:


17

find相当直白。当您告诉它在“〜/ Downloads /”中搜索时,它会使用该字符(包括斜杠)作为找到的内容的前缀。由于在给定路径的末尾有一个不必要的且不相关的斜杠,因此在输出中最终会出现一个不必要的且不相关的额外斜杠。

解决方案:从搜索目录中删除结尾的“ /”:

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf

4

这个双斜杠是什么意思?

意味着您正在使用奇怪的旧BSD查找。

如何避免呢?

您确实可以在原始命令中省略斜杠,但是由于它是通过制表符自动完成添加的(您肯定应该尽可能多地使用它),并且因为斜杠实际上已在其他地方的许多地方使用,所以可以确保您正在处理目录而不是文件名,省略目录是违反直觉和愚蠢的。

相反,我建议您执行以下其他操作之一:

a)做一个包装,以查找要灌注的管道:sed's @ // @ / @'

b)使用'brew install findutils'安装GNU的findutils,然后直接使用'gfind',将'find'别名为'gfind',或将/ usr / local / opt / findutils / libexec / gnubin添加到您的路径中(这还会添加GNU findutils的“ locate”,“ updatedb”和“ xargs”)。

c)首先切换到一个不会出现此问题的GNU / Linux操作系统(以及其他一千个)。:p


1
只需添加set mark-directories off到您的。inputrc而且你很好。来自那些BSD的老家伙。
fd0

@ fd0,则无法区分目录和具有相同名称的文件;BSD的发现这里有点麻烦,而不是bash或readline
Jan Kyu Peblik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.