GNU/Linux >> Linux Esercitazione >  >> Linux

Riformattare un gran numero di file XML?

Sto manipolando un gran numero di file XML sparsi in una struttura di directory nidificata.

Ho provato quanto segue:

$ find . -name "*.xml" -type f | xargs -- xmllint --format

Il problema è che genera l'output XML formattato sullo schermo, ma non cambia il file.

Come posso modificare questo comando in modo che il contenuto effettivo del file venga modificato?

Risposta accettata:

Questo può essere fatto da find utilizzando direttamente -exec :

find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;

Cosa è passato a -exec verrà invocato una volta per file trovato con i parametri del modello {} sostituito con il nome del file corrente. Il \; alla fine del comando find termina semplicemente la riga.

L'uso di xargs non è realmente necessario in questo caso perché dobbiamo invocare xmllint una volta per file poiché entrambi i nomi dei file di input e di output devono essere specificati all'interno della stessa chiamata.

xargs sarebbe necessario se il comando inviato da find funzionava su più file alla volta e quell'elenco era lungo. Non puoi farlo in questo caso, poiché devi passare il singolo nome del file a --output opzione di xmllint . Senza xargs potresti finire con un errore "Elenco argomenti troppo lungo" se stai elaborando molti file. xargs supporta anche le stringhe di sostituzione dei file con -I opzione:

find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'

Farebbe lo stesso di find -exec comando sopra. Se una qualsiasi delle tue cartelle ha caratteri dispari in spazi simili dovrai usare -0 opzioni di find e xargs . Ma usando xargs con -I implica l'opzione -L 1 il che significa comunque elaborare solo 1 file alla volta, quindi puoi anche utilizzare direttamente find con -exec .


Linux
  1. Come contare il numero di file in ogni directory?

  2. Rimozione di file con rm utilizzando find e xargs

  3. Conteggio del numero di file in una directory con un comando del terminale OSX

  4. Come contare il numero totale di righe di file trovati?

  5. du che conta il numero di file/directory piuttosto che la dimensione

Come trovare file in Linux

Trova file di grandi dimensioni in Linux

Come spostare un gran numero di file in Linux

Come copiare un gran numero di file in Linux

Come trovare file con un determinato sottopercorso?

Linux:trova il numero di file in una directory e sottodirectory