GNU/Linux >> Linux Esercitazione >  >> Linux

convertire l'output di bash `ls` in un array json

Se sai che nessun nome di file contiene newline, usa jq:

ls | jq -R -s -c 'split("\n")[:-1]'

Breve spiegazione dei flag a jq:

  • -R tratta l'input come stringa invece che come JSON
  • -s unisce tutte le righe in un array
  • -c crea un output compatto
  • [:-1] rimuove l'ultima stringa vuota nell'array di output

Ciò richiede la versione 1.4 o successiva di jq. Prova questo se non funziona per te:

ls | jq -R '[.]' | jq -s -c 'add'


Sì, ma i casi angolari e la gestione Unicode ti faranno impazzire. Meglio delegare a un linguaggio di scripting che lo supporti nativamente.

$ ls
あ  a  "a"  à  a b  私
$ python -c 'import os, json; print json.dumps(os.listdir("."))'
["\u00e0", "\"a\"", "\u79c1", "a b", "\u3042", "a"]

Linux
  1. Converti l'output del comando ad albero in formato Json?

  2. Analizzare un campo da un array Json in un array Bash?

  3. Come creare una matrice di elementi unici da una stringa/array in Bash?

  4. Script Bash:come assegnare ogni riga di output di comando ai valori in un array?

  5. Bash Converti \xc3\x89 in É?

Bash:Scrivi su file

Matrici Bash

Matrice associativa in Bash

Converti i formati di data in bash

Converti un output in una stringa

Converti una stringa di testo in bash in array