我正在使用适用于 Windows 的 git-bash(即内部 msys2)。
我需要搜索我的所有硬盘。
当我尝试运行find / -type d
(和我的搜索模式)时,搜索会在 git 的系统目录中运行,并在/proc/registry/
出现以下消息后中止搜索
find: failed to read file names from file system at or below '/': No such file or directory
当我运行时,ls -la /
我只看到系统目录。因为我的主目录位于/c/Users/myuser
并且挂载显示其他驱动器号已挂载在下面/
(例如/c/
,/d/
等等)。我确信应该有一种方法可以搜索/
并找到例如文件/c/
等等/d/
。
所以问题是:
- 为什么 find 会根据消息中止搜索?
- 为什么已安装的 Windows 驱动器对于 ls/find 不可见?
- 有没有办法用一个命令搜索所有已安装的 Windows 驱动器
find
?(无需手动列出所有已知的驱动器号)
我发现,有一个错误报告在MSYS2 软件包#1764出现同样的错误,但没有真正的解决方案。
答案1
我没有答案,为什么会出现此错误,或者为什么已安装的驱动器号没有显示在根目录中,但我创建了一个解决方法来搜索所有驱动器:
命令是:
find $(mount | cut -d ' ' -f 3 | grep -x '.\{2\}' | tr '\n' ' ') -type d
它使用子命令来查找已安装的驱动器,并告诉 find 在每个位置进行搜索。
详细解释:
mount
:以如下格式显示所有已挂载的驱动器C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto)
cut -d ' ' -f 3
:将 mount 的输出拆分成几部分并返回每行的 3.colgrep -x '.\{2\}'
:查找所有长度正好为 2 位数字的行(例如/c
),并删除其余部分tr '\n' ' '
: 用空格代替换行符
最终执行的命令例如
find /c /d /e -type d
如果您有 3 个已安装的驱动器号。