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