我只能访问 Busybox 1.31.1
我最初想删除输出的当前工作目录(单点)。
例子:
/prueba$ ls
uno dos tres
当我:
$ busybox find .
.
./uno
./dos
./tres
这很容易通过以下任一方式完成:
busybox find . -not -path .
busybox find . -mindepth 1
现在,我之前尝试的是:
busybox find . -exec sh -c ' readlink -f "$1" | tail -n +2 ' sh {} \;
什么都不打印。如果激活详细输出:
==> standard input <==
==> standard input <==
==> standard input <==
==> standard input <==
==> standard input <==
如果行地址为 1,则输出完全不同:
busybox find . -exec sh -c ' readlink -f "$1" | tail -n +1 ' sh {} \;
==> standard input <==
/tmp/prueba
==> standard input <==
/tmp/prueba/tres
==> standard input <==
/tmp/prueba/dos
==> standard input <==
/tmp/prueba/uno
这是怎么回事?
这
为每个文件调用一次命令。在您的情况下,
readlink
输出一行输出,然后您tail -n +2
剥离第一行,让您一无所有。如果您使用tail -n +1
这只是一种冗长的说法cat
,将输入复制到输出。如果你重写它,那么它就在这样
tail -n +2
的隐式循环之外你会得到你预期的结果。
您可以通过批处理命令执行来提高命令的效率。
这需要您要运行的命令来获取多个文件。而
+
不是\;
make find 运行命令的次数要少得多,因为它仅在具有完整的文件名缓冲区而不是每个文件一次时才运行命令。显然我也删除了不需要sh
的。