我正在做一些粗略的代码分析,我注意到我的输出中有一些奇怪的错误行:
cat: rust/library/portable-simd/crates/test_helpers: Is a directory
cat: rust/library/core/tests/iter/adapters: Is a directory
cat: rust/library/core/src/iter/adapters: Is a directory
cat: rust/library/test/src/formatters: Is a directory
cat: rust/library/test/src/helpers: Is a directory
普通文件是使用-type f
选择的,而-print0
正是用来避免这种错误的。长话短说,事情是这样的:
$ find rust/library/core/src/iter/adapters -print0 -type f | hexdump -C | head -n3
00000000 72 75 73 74 2f 6c 69 62 72 61 72 79 2f 63 6f 72 |rust/library/cor|
00000010 65 2f 73 72 63 2f 69 74 65 72 2f 61 64 61 70 74 |e/src/iter/adapt|
00000020 65 72 73 00 72 75 73 74 2f 6c 69 62 72 61 72 79 |ers.rust/library|
注意第一个条目-这是一个目录!
$ la -d rust/library/core/src/iter/adapters/
drwxr-xr-x 2 user group 4096 Apr 11 01:57 rust/library/core/src/iter/adapters/
更奇怪的是,当省略-print0
时,这条线并不存在。.
$ find rust/library/core/src/iter/adapters -type f | hexdump -C | head -n3
00000000 72 75 73 74 2f 6c 69 62 72 61 72 79 2f 63 6f 72 |rust/library/cor|
00000010 65 2f 73 72 63 2f 69 74 65 72 2f 61 64 61 70 74 |e/src/iter/adapt|
00000020 65 72 73 2f 6d 61 70 2e 72 73 0a 72 75 73 74 2f |ers/map.rs.rust/|
那是窃听器吗看上去像是-但已经找到了。这就像。嗯。嗯。.经过良好测试的等等。肯定是我用错了
我的find二进制文件来自Arch Linux中的GNU findutils包。
编辑:这绝对不是一个bug:
$ podman run --rm -i -v ".:/data" --workdir /data docker.io/cicirello/gnu-on-alpine:latest find rust/library/core/src/iter/adapters -type f -print0 | hexdump -C | head -n3
00000000 72 75 73 74 2f 6c 69 62 72 61 72 79 2f 63 6f 72 |rust/library/cor|
00000010 65 2f 73 72 63 2f 69 74 65 72 2f 61 64 61 70 74 |e/src/iter/adapt|
00000020 65 72 73 2f 6d 61 70 2e 72 73 00 72 75 73 74 2f |ers/map.rs.rust/|
一切正常不管是在集装箱里还是在集装箱外,都是4号。9.0.
2条答案
按热度按时间vngu2lb81#
您需要交换
-print0
和-type f
,因为-print0
会导致打印该行。sf6xfgos2#
好吧......通常情况下,这是一个非常小的事情,决定了这五个目录是否是输出的一部分:
参数的顺序。
-print0
属于-type f
之后-这是一个总是返回true的操作!我只看到这些目录的原因是后来出现的(rs|go)$
的grep
(如果我在正则表达式中包含\.
,参数顺序的这个问题可能会被忽视)。提醒我actions是可以影响结果的表达式的事情是来自man页面的不祥的
True;
:实际上,busyboxfind在交换参数时的行为是相同的。
光荣!