将 "find -print0 "存储在中间变量中而不丢失nul char。

问题描述 投票:0回答:1

我有以下一系列的命令,用于在一个目录中精简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

我完全意识到这是一个 "NO -NO",因为它并没有使用 "JSON"。-print0 | xargs -0 模式。

然而,我想 保留对发现的文件进行回声的功能,但也可以调用 findjsonlint-cli 只有一次。

这一点由于以下事实而变得困难 ash 存不住 \0 变幻莫测. 所以这将 工作。

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

我怎么能用 -print0 | xargs -0 是否仍然会保持当前将发现的文件回传到stdout的行为?

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

shell xargs ash
1个回答
1
投票

看不出有什么能阻止你这样做。

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

请注意,如果你有这么多文件,以至于find需要把它们分成几组,这就不会像你预期的那样工作。

© www.soinside.com 2019 - 2024. All rights reserved.