我有以下一系列的命令,用于在一个目录中精简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
模式。
然而,我想 保留对发现的文件进行回声的功能,但也可以调用 find
和 jsonlint-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容器)。)
看不出有什么能阻止你这样做。
echo 'Discovered JSON files:'
find . -name '*.json' -type f -print -exec jsonlint-cli {} +
请注意,如果你有这么多文件,以至于find需要把它们分成几组,这就不会像你预期的那样工作。