GNU/Linux >> Znalost Linux >  >> Linux

Přeformátování velkého počtu souborů XML?

Manipuluji s velkým množstvím souborů XML roztroušených ve vnořené adresářové struktuře.

Zkusil jsem následující:

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

Problém je v tom, že generuje naformátovaný výstup XML na obrazovce, ale nemění soubor.

Jak mohu změnit tento příkaz tak, aby se změnil skutečný obsah souboru?

Přijatá odpověď:

To lze provést z find přímo pomocí -exec :

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

Co je předáno do -exec bude vyvoláno jednou pro každý nalezený soubor s parametry šablony {} nahrazen aktuálním názvem souboru. \; na konci příkazu find právě ukončí řádek.

Použití xargs není v tomto případě opravdu nutné, protože musíme vyvolat xmllint jednou na soubor, protože název vstupního i výstupního souboru musí být specifikován ve stejném volání.

xargs by bylo potřeba, pokud by příkaz přesměrovaný z find pracoval na více souborech současně a tento seznam byl dlouhý. V tomto případě to nemůžete udělat, protože musíte předat jeden název souboru do --output možnost xmllint . Bez xargs pokud zpracováváte velké množství souborů, můžete skončit s chybou „Příliš dlouhý seznam argumentů“. xargs také podporuje nahrazení souborů řetězcem -I možnost:

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

Udělalo by to totéž jako find -exec příkaz výše. Pokud některá z vašich složek obsahuje liché znaky v podobných mezerách, budete muset použít -0 možnosti find a xargs . Ale pomocí xargs s -I znamená volbu -L 1 což znamená, že stejně zpracujte pouze 1 soubor najednou, takže můžete také přímo použít find s -exec .


Linux
  1. Jak najít velké soubory linux pomocí příkazů find a du

  2. Jak zkontrolovat velké soubory v konzole

  3. Jak najít soubory s určitou podcestou?

  1. Jak spočítat počet souborů v každém adresáři?

  2. Odstranění souborů pomocí rm pomocí find a xargs

  3. du, který počítá spíše počet souborů/adresářů než velikost

  1. Jaký je nejlepší způsob, jak spočítat počet souborů v adresáři?

  2. Počítat počet souborů ve složce za den?

  3. Najděte adresáře obsahující určitý počet souborů