在不丢失 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
模式。
但是,我想保留回显已发现文件的能力,但也只调用一次find
和jsonlint-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 {} +
请注意,如果您找到的文件太多,需要将它们分成几组,这将不会像您预期的那样工作。
我有以下命令序列来检查目录中的 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
模式。
但是,我想保留回显已发现文件的能力,但也只调用一次find
和jsonlint-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 {} +
请注意,如果您找到的文件太多,需要将它们分成几组,这将不会像您预期的那样工作。