为什么'发现'命令失败而没有错误?

时间:2017-03-30 20:10:54

标签: linux find

注意 我似乎忘了提到这只会在重启后发生。一旦启动,如果我在启动后5分钟或启动后3天运行命令并不重要。但是一旦find运行,它将始终找到它(即使在5分钟或3天后)。

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

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

文件的证据存在:

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卡带到另一台计算机,安装它并再次进行搜索sudo find /mnt/flash -name '*default.png'产生了正确的结果。所以它必须是操作系统或可能是硬件问题。

更新3: 我在Raspberry Pi 3上加载了一个新的操作系统并使用了令人讨厌的SD卡/操作系统'并将其安装在Raspberry Pi 3上。这是为了查看它是否是硬件错误。 sudo find /mnt/flash -name '*default.png'产生了正确的结果。所以它必须是操作系统。

最初,我使用了RetroPie v4.2,阻止它自动运行。拿起我的娱乐软件并进行编译。将其设置为与lirc一起在启动时运行。娱乐软件中的一个选项是运行Emulationstation(您注释掉的命令可以在启动时停止自动运行仿真软件)。一切正常。所以我不知道会导致这个问题的原因。

据我所知,文件所在的/ opt目录与其他目录没有什么不同。

更新4: 好的,在搜索' * default.png'之前我做了sudo find / -name 'hostname'并且它返回了正确的结果。然后我跑了sudo find / -name '*default'并找到了它。因此,只有第一个find命令可能失败。后来的一切似乎都有效。

更新5: 我能够找到另一个操作系统,其中第一个find始终不起作用。我有另一个运行Arch Linux 4.1.7-2-ARCH的Raspberry Pi 1 Model B.它并不包含我一直在寻找的png,但无论如何我都在搜索它。

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个不同的Raspberry Pi具有相同的问题。我已经在Banana Pi上对此进行了测试,结果第一次正确。

更新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'这些日志文件非常庞大。我在寻找什么呢?做猫登录| grep' x'其中x是'警告,警告,警告,错误,错误,错误。我还应该检查什么?日志文件log1 = 9.9M和log2 = 13M

存在大小差异

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

1 个答案:

答案 0 :(得分:-1)

你可以看到'发现' manpage得到答案。如果要在命令中使用正则表达式,则必须引用正则表达式。 您的命令应为sudo find / -name \*default.pngsudo 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