GNU/Linux >> Linux の 問題 >  >> Linux

多数のXmlファイルを再フォーマットしますか?

ネストされたディレクトリ構造全体に散在する多数のXMLファイルを操作しています。

私は次のことを試しました:

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

問題は、フォーマットされたXML出力を画面に生成しますが、ファイルは変更しないことです。

このコマンドを変更して、実際のファイルの内容を変更するにはどうすればよいですか?

承認された回答:

これはfindから実行できます -execを直接使用する :

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

-execに渡されるもの テンプレートパラメータ{}で見つかったファイルごとに1回呼び出されます 現在のファイル名に置き換えられます。 \; findコマンドの最後で、行を終了するだけです。

xargsの使用 この場合、xmllintを呼び出す必要があるため、実際には必要ありません。 入力ファイル名と出力ファイル名の両方を同じ呼び出し内で指定する必要があるため、ファイルごとに1回。

xargs findからパイプされるコマンドが一度に複数のファイルで機能していて、そのリストが長い場合に必要になります。この場合、単一のファイル名を--outputに渡す必要があるため、これを行うことはできません。 xmllintのオプション 。 xargsなし 大量のファイルを処理している場合、「引数リストが長すぎます」というエラーが発生する可能性があります。 xargs -Iを使用したファイル置換文字列もサポートします オプション:

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

find -execと同じように動作します 上記のコマンド。フォルダのいずれかが同じスペースに奇数文字を持っている場合は、-0を使用する必要があります findのオプション およびxargs 。ただし、xargsを使用する -Iを使用 オプション-L 1を意味します これは、とにかく一度に1つのファイルのみを処理することを意味するため、findを直接使用することもできます。 -execを使用 。


Linux
  1. ディレクトリ内のファイル数を数える最良の方法は何ですか?

  2. 特定のサブパスを持つファイルを見つける方法は?

  3. 1日あたりのフォルダ内のファイル数を数えますか?

  1. find と xargs を使用して rm でファイルを削除する

  2. OSX端末コマンドでディレクトリ内のファイル数をカウントする

  3. 見つかったファイルの総行数を数えるには?

  1. ディレクトリとサブディレクトリ内のファイル数を見つける方法

  2. サイズではなくファイル/ディレクトリの数をカウントする du

  3. 特定の数のファイルを含むディレクトリを検索する