【发布时间】:2021-08-17 23:14:46
【问题描述】:
我正在尝试实施此解决方案:
Make xargs handle filenames that contain spaces
到cat 几个要使用find 选择的文件。
因此,我尝试实现该帖子中提供的 BSD 解决方案,但如果我这样做了:
$ find "/tmp/database" -name "FOO 03-11*"
/tmp/database/01/FOO 03-11.txt
/tmp/database/03/FOO 03-11.txt
/tmp/database/02/FOO 03-11.txt
/tmp/database/05/FOO 03-11.txt
/tmp/database/04/FOO 03-11.txt
$ find "/tmp/database" -name "FOO 03-11*" | sort
/tmp/database/01/FOO 03-11.txt
/tmp/database/02/FOO 03-11.txt
/tmp/database/03/FOO 03-11.txt
/tmp/database/04/FOO 03-11.txt
/tmp/database/05/FOO 03-11.txt
$ find "/tmp/database" -name "FOO 03-11*" | sort | xargs -0
/tmp/database/01/FOO 03-11.txt
/tmp/database/02/FOO 03-11.txt
/tmp/database/03/FOO 03-11.txt
/tmp/database/04/FOO 03-11.txt
/tmp/database/05/FOO 03-11.txt
$ find "/tmp/database" -name "FOO 03-11*" | sort | xargs -0 cat
cat: /tmp/database/01/FOO 03-11.txt
/tmp/database/02/FOO 03-11.txt
/tmp/database/03/FOO 03-11.txt
/tmp/database/04/FOO 03-11.txt
/tmp/database/05/FOO 03-11.txt
: No such file or directory
$
我仍然无法让cat 命令正常工作。所提供帖子的接受答案中缺少什么以使cat 与xargs -0 一起工作?
我正在使用 FreeBSD 12 及其外壳 @987654328@,据我所知是 POSIX。
我会 - 显然错误地 - 期望这个 find/sort/xargs/cat 序列输出文件的内容,如下所示:
$ cat "/tmp/database/01/FOO 03-11.txt"
CONTENT OF FILE /tmp/database/01/FOO 03-11.txt
$ cat "/tmp/database/02/FOO 03-11.txt"
CONTENT OF FILE /tmp/database/02/FOO 03-11.txt
$ cat "/tmp/database/03/FOO 03-11.txt"
CONTENT OF FILE /tmp/database/03/FOO 03-11.txt
$ cat "/tmp/database/04/FOO 03-11.txt"
CONTENT OF FILE /tmp/database/04/FOO 03-11.txt
$ cat "/tmp/database/05/FOO 03-11.txt"
CONTENT OF FILE /tmp/database/05/FOO 03-11.txt
所以预期的输出是:
$ find "/tmp/database" -name "FOO 03-11*" | sort | xargs -0 cat
CONTENT OF FILE /tmp/database/01/FOO 03-11.txt
CONTENT OF FILE /tmp/database/02/FOO 03-11.txt
CONTENT OF FILE /tmp/database/03/FOO 03-11.txt
CONTENT OF FILE /tmp/database/04/FOO 03-11.txt
CONTENT OF FILE /tmp/database/05/FOO 03-11.txt
【问题讨论】:
-
它有效 - 没有这样的目录。
xargs正确地将输入传递给cat- 它工作正常,然后cat告诉你没有这样的目录 - 也很可能是正确的。你期待别的吗?为什么?你认为-0是什么意思? -
这些文件在
/tmp/database/0x下,我想对它们进行分类。我已经编辑了问题,因此预期的输出更加清晰。 -
如果您可以排除这样一种可能性,即您可能一天拥有太多文件,如果您将它们一起提供给单个 @987654337,您会收到 arglist too long 错误@,你也可以做一个
cat $(find ...| sort)。 -
我试过了,该解决方案不适用于名称中带有空格的文件,至少在 FreeBSD 中的
/bin/sh中无效$ cat $(find "/tmp/database" -name "FOO 03-11*" | sort) cat: /tmp/database/01/FOO: No such file or directory ...