在不丢失 nul char 的情况下将 'find -print0' 存储在中间变量中

Storing 'find -print0' in intermediate variable without losing nul char

我有以下命令序列来检查目录中的 JSON 个文件:

npm install --global --no-save jsonlint-cli
FILES="$(find . -name '*.json' -type f -print)"
echo -e "Discovered JSON files:\n$FILES"
echo "$FILES" | tr '\n' ' ' | xargs jsonlint-cli

我完全意识到这是不行的,因为它不使用 -print0 | xargs -0 模式。

但是,我想保留回显已发现文件的能力,但也只调用一次findjsonlint-cli

ash can't store [=17=] in a variable 使这变得困难。所以这 不会 起作用:

FILES="$(find . -name '*.json' -type f -print0)"
echo -e "Discovered JSON files:\n$FILES" | tr '[=12=]' '\n'  # No effect, '[=12=]' already gone
echo "$FILES" | xargs -0 jsonlint-cli

如何使用 -print0 | xargs -0 仍然保持将发现的文件回显到 stdout 的当前行为?

本例中的 shell 是 ash(在 node:alpine Docker 容器内)。

看不到任何阻止你这样做的东西:

echo 'Discovered JSON files:'
find . -name '*.json' -type f -print -exec jsonlint-cli {} +

请注意,如果您找到的文件太多,需要将它们分成几组,这将不会像您预期的那样工作。