J'ai mis au point un one-liner basé sur jq qui convertit une séquence de chaînes à zéro terminal en une séquence de chaînes JSON :

xargs -0 dash -c 'for i in "$@"; do printf %s "$i" | jq -Rs . ; done' _dummy_

J'aimerais en couper xargs et/ou dash si possible. Existe-t-il un moyen de faire la même chose avec juste jq ?

Exemple d'utilisation:

# Create a new dir with some funny-named files
mkdir funny
cd funny
touch $'ABC\nDEF' $' GHI\nJKL ' ' - はじめまして - '
# Use find -print0 to list the files
find -type f -print0 |
# Convert the null-terminated lines to JSON strings
xargs -0 dash -c 'for i in "$@"; do printf %s "$i" | jq -Rs . ; done' _dummy_

Production:

"./ - はじめまして - "
"./ GHI\nJKL "
"./ABC\nDEF"
0
psmay 17 févr. 2020 à 06:04

1 réponse

Meilleure réponse

Ce qui suit produit la sortie que vous avez spécifiée :

find . -type f -print0 | jq -Rs 'split("\u0000")[]'
1
peak 17 févr. 2020 à 03:50