GNU/Linux >> Tutoriels Linux >  >> Linux

Reformatage d'un grand nombre de fichiers XML ?

Je manipule un grand nombre de fichiers XML dispersés dans une structure de répertoires imbriqués.

J'ai essayé ce qui suit :

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

Le problème est qu'il génère la sortie XML formatée à l'écran, mais ne modifie pas le fichier.

Comment puis-je modifier cette commande afin que le contenu réel du fichier soit modifié ?

Réponse acceptée :

Cela peut être fait à partir de find directement en utilisant -exec :

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

Ce qui est passé à -exec sera invoqué une fois par fichier trouvé avec les paramètres de modèle {} remplacé par le nom de fichier actuel. Le \; à la fin de la commande find termine juste la ligne.

L'utilisation de xargs n'est pas vraiment nécessaire dans ce cas car nous devons invoquer xmllint une fois par fichier car les noms des fichiers d'entrée et de sortie doivent être spécifiés dans le même appel.

xargs serait nécessaire si la commande dirigée vers la recherche fonctionnait sur plusieurs fichiers à la fois et que cette liste était longue. Vous ne pouvez pas le faire dans ce cas, car vous devez transmettre le nom de fichier unique à --output option de xmllint . Sans xargs vous pourriez vous retrouver avec une erreur "Liste d'arguments trop longue" si vous traitez beaucoup de fichiers. xargs prend également en charge les chaînes de remplacement de fichiers avec le -I choix :

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

Ferait la même chose que le find -exec commande ci-dessus. Si l'un de vos dossiers contient des caractères impairs dans des espaces similaires, vous devrez utiliser le -0 options de find et xargs . Mais en utilisant xargs avec -I implique l'option -L 1 ce qui signifie ne traiter qu'un seul fichier à la fois de toute façon, vous pouvez donc aussi bien utiliser directement find avec -exec .


Linux
  1. Comment trouver le nombre de fichiers dans un répertoire et des sous-répertoires

  2. Comment trouver des fichiers volumineux Linux avec les commandes find et du

  3. Comment vérifier les fichiers volumineux dans la console

  4. Quelle est la meilleure façon de compter le nombre de fichiers dans un répertoire ?

  5. Compter le nombre de fichiers dans un répertoire avec une commande de terminal OSX

Comment trouver des fichiers sous Linux

Trouver des fichiers volumineux sous Linux

Comment déplacer un grand nombre de fichiers sous Linux

Comment copier un grand nombre de fichiers sous Linux

Linux :rechercher le nombre de fichiers dans un répertoire et des sous-répertoires

Quelle est la manière la plus efficace de déplacer un grand nombre de fichiers qui résident dans un seul répertoire ?