因此,如果我要下载 5000 个音频文件,每个文件时长 5 秒,在第一个 1000 个下载之后,我运行:
find . -iname "*.wav" -exec play {} \;
它会只播放我第一次运行该命令时存在的 1000 个文件,还是会播放所有 5000 个文件,因为文件的下载速度比 exec 完成它们的速度快?
答案1
这取决于实施,因为标准说:
如果从正在搜索的目录层次结构中删除或添加文件,则未指定是否寻找将该文件包含在其搜索中。
我认为这两种行为都可能发生,具体取决于目录布局和文件系统行为。如果在find
打开目录以读取其条目后,新添加的条目由 返回readdir
,则find
也将处理该情况。但这也未指定POSIX:
如果在最近一次调用
opendir()
或后从目录中删除或添加文件rewinddir()
,则后续调用是否readdir()
返回该文件的条目是未指定的。
至少在 macOS 上使用 GNU find 和 BSD find 时,行为似乎是一次读取目录的所有条目:
% (sleep 5; touch abc) & find . -exec sleep 5 \; -print
[1] 57727
.
[1] + 57727 done ( sleep 5; touch abc; )
./foo
./bar
注意它是如何没有找到的abc
。但如果第一个sleep
减少,则find
递归为.
后结束sleep
了:
% rm abc; (sleep 2; touch abc) & find . -exec sleep 5 \; -print
[1] 57971
[1] + 57971 done ( sleep 2; touch abc; )
.
./abc
./foo
./bar
因此,如果您的文件被下载到不同的子目录中,则find
运行后下载的某些文件可能会播放,但其他一些文件可能不会播放。