为什么“查找”命令失败而没有错误?

注意似乎我忘了提及这只发生在重新启动后。 一旦启动,启动5分钟后或启动3天后运行命令无关紧要。 但一旦find运行,它总是会find它(即使5分钟或3天后)。

我有一个运行Linux 4.9.17-v7 +的Raspberry Pi 3。 我不知道为什么会发生这种情况,但每次login到计算机并尝试查找已知的png文件时,提示都会返回,就好像没有结果一样。 知道该文件存在,我再次运行相同的命令(向上箭头键),并返回正确的结果。

如何用find命令获得2个不同的结果(或不一致的结果)? 可能有我缺less的包裹吗?

certificate文件的存在:

 me@here:~ $ ls -la /opt/retropie/supplementary/splashscreen/retropie-default.png -rw-r--r-- 1 root root 1168926 Mar 30 19:51 ls -la /opt/retropie/supplementary/splashscreen/retropie-default.png 

但是当我运行find命令时,提示符返回没有结果或错误:

 me@here:~ $ sudo find / -name *default.png me@here:~ $ 

如果我再次运行find命令,我得到这些结果:

 me@here:~ $ sudo find / -name *default.png /opt/retropie/supplementary/splashscreen/retropie-default.png me@here:~ $ 

我究竟做错了什么? 我错过了一个包吗? 程序是否腐败? 当我正在寻找某些东西而没有获得任何结果时,我怎么知道它是否存在? 请帮帮我!

更新1:评论请求。

使用引号引用-name参数运行该命令:

 me@here:~ $ sudo find / -name '*default.png' me@here:~ $ sudo find / -name '*default.png' /opt/retropie/supplementary/splashscreen/retropie-default.png me@here:~ $ 

更新2:把SD卡到另一台电脑,安装它,再次searchsudo find /mnt/flash -name '*default.png'产生了正确的结果。 所以它必须是操作系统或可能是硬件问题。

更新3:我加载了一个新的操作系统到Raspberry Pi 3上,并拿走了有问题的'sd card / OS',并将其安装在Raspberry Pi 3上。这是为了查看它是否是硬件错误。 sudo find /mnt/flash -name '*default.png'产生了正确的结果。 所以它必须是操作系统。

最初,我把RetroPie v4.2,停止自动运行。 拿我的娱乐软件,并编译它。 设置它与lirc一起启动运行。 娱乐软件中的一个选项是运行Emulationstation(您注释掉的命令在启动时停止仿真软件的自动运行)。 这一切工作。 所以我不知道会导致这个问题。

据我所知,该文件包含在/ opt目录是没有任何别的不同。

更新4:好吧,search'* default.png'之前,我做了sudo find / -name 'hostname' ,它返回正确的结果。 然后我运行sudo find / -name '*default'并find它。 所以只有第一个find命令可能会失败。 其后的所有似乎工作。

更新5:我能够find第一个find并不总是工作的另一个操作系统。 我有另一个运行Arch Linux 4.1.7-2-ARCH的Raspberry Pi 1 Model B. 它不包含我一直在寻找的PNG,但我仍然search它。

 me@there:~ $ sudo find / -name '*default.png' me@there:~ $ sudo find / -name '*default.png' /usr/share/icons/Adwaita/256x256/status/avatar-default.png /usr/share/icons/Adwaita/8x8/emblems/emblem-default.png /usr/share/icons/Adwaita/16x16/emblems/emblem-default.png /usr/share/icons/Adwaita/16x16/status/avatar-default.png /usr/share/icons/Adwaita/22x22/emblems/emblem-default.png /usr/share/icons/Adwaita/22x22/status/avatar-default.png /usr/share/icons/Adwaita/32x32/emblems/emblem-default.png /usr/share/icons/Adwaita/32x32/status/avatar-default.png /usr/share/icons/Adwaita/48x48/emblems/emblem-default.png /usr/share/icons/Adwaita/48x48/status/avatar-default.png /usr/share/icons/Adwaita/24x24/emblems/emblem-default.png /usr/share/icons/Adwaita/24x24/status/avatar-default.png /usr/share/gtk-doc/html/gtk3/window-default.png me@there:~ $ 

所以2个不同的操作系统和2个不同的树莓派都有同样的问题。 我已经在我的Banana Pi上testing过了,结果第一次是正确的。

更新6:好的,一些评论的更新。 是的,文件retropie-default.png位于根目录下,系统上的任何地方都没有autofs / unionfs。

sudo find /opt/retropie/supplementary/splashscreen/ -name '*default.png'行为不一样,并且产生正确的结果。

运行sudo date两次会产生正确的结果。

请仔细阅读本文开头部分,因为我忘记了一个重点。

今天晚些时候我会继续运行。

更新7:find命令之前列出目录仍产生相同的结果。

 me@here:~ $ ls /opt/retropie/supplementary/splashscreen/ LICENSE retropie-2015-carbon-video.mp4 README.md retropie-2015.png retropie-2013.png retropie-default-16x10.png retropie-2014.png retropie-default-4x3.png retropie-2015-4x3.png retropie-default.png retropie-2015-carbon-video-4x3.mp4 me@here:~ $ sudo find / -name '*2013.png' me@here:~ $ sudo find / -name '*2013.png' /opt/retropie/supplementary/splashscreen/retropie-2013.png me@here:~ $ 

更新8: sudo strace -o log1 find / -name '*default.png' and then sudo strace -o log2 find / -name '*default.png'这些日志文件是巨大的。 我在找什么呢? 做猫logn | grep'x'其中x是'警告,警告,警告,错误,错误,错误。 我还应该检查什么? 日志文件log1 = 9.9M和log2 = 13 M有一个大小差异

我在两个日志文件的结尾都注意到log2中有一个不同的命令。 munmap(0x76f31000, 4096)不在log1中。 也许这是失败所在?

你可以看到“查找”手册页来获得答案。 如果你想在你的命令中使用正则表达式,你必须引用正则表达式。 你的命令应该是sudo find / -name \*default.png或者sudo find / -name '*default.png'

下面的手册页参考

NON-BUGS

“路径必须先于表达式”错误消息

$ find . -name *.c -print find: paths must precede expression Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]

发生这种情况是因为*.c已经被shell扩展,导致find发现实际上接收到这样的命令行(如果在.文件夹中有frcode.c locate.c word_io.c文件):

find . -name frcode.c locate.c word_io.c -print

那个命令当然不起作用。 不要这样做,你应该把这个模式用引号引起来或者转义通配符:

$ find . -name '*.c' -print $ find . -name \*.c -print