无输出: busybox find 。 -exec sh -c ' readlink -f "$1" | -exec sh -c ' readlink -f "$1" | tail -n +2 ' sh {} \;

无输出: busybox find 。 -exec sh -c ' readlink -f "$1" | -exec sh -c ' readlink -f "$1" | tail -n +2 ' sh {} \;

我只能访问 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

这是怎么回事?

答案1

-exec some command with parms {} \;

为每个文件调用一次该命令。在您的情况下,readlink输出一行输出,然后您tail -n +2剥离第一行,什么都没有留下。如果你使用tail -n +1这只是一种冗长的说法cat,将输入复制到输出。

如果你重写它,那么它就tail -n +2在隐式循环之外,如下所示

busybox find . -exec sh -c ' readlink -f "$1" ' sh {} \; | tail -n +2

你会得到你预期的结果。

您可以通过批处理命令执行来提高命令的效率。

busybox find . -exec readlink -f -- {} + | tail -n +2

这需要您要运行的命令来获取多个文件。与+find 相比,它\;使 find 运行命令的次数更少,因为它仅在具有完整的文件名缓冲区时才运行命令,而不是每个文件运行一次。显然我也删除了不需要的东西sh

相关内容