コマンド出力の2つのファイルの比較 [閉じる]

コマンド出力の2つのファイルの比較 [閉じる]

現在のディレクトリにはXMLファイルがたくさんあります。

質問1.

私が読んだところによれば、evalは結果を返し、それを変数に保存します。ただし、次のコマンドの使用中にエラーが発生します。

find ./ -name '*.xml' | file=$(eval awk '{print $0}') ; echo $file

編集(CASが指摘したように評価を省略した後) -

eval を省略すると、単に空の文字列が返されます。

find ./ -name '*.xml' | file=$(awk '{print $0}') ; echo $file

質問2.

私はちょうどbashを学びたかったので、最初の2つのファイルをfindの出力と比較する複雑なシーケンスを作成しました。複雑な順序は、単にbashプログラミングの概念を理解することです。

find ./ -name '*.xml' | file=$(awk '{print $0}') ; echo $file && diff -y $(sed '2q;d' $file) $(sed '1q;d' $file)

ベストアンサー1

以下は、bashで配列を使用してこれを行う1つの方法の非常に簡単な例です。

#!/bin/bash

IFS=$'\n' files=( $(find . -name '*.xml' | head -n 2) )

if [[ -n ${files[0]} && -n ${files[1]} ]] ; then
  diff "${files[0]}" "${files[1]}"
fi

その後、find ... | head -n 2コマンドが実行され、各行(返されたファイル名)が配列に保存されます$files。最初の2つの配列要素(0と1)が空でない場合は、そのファイル名を使用してdiffを実行します。

ディレクトリまたはファイル名に改行文字が含まれていると中断される可能性があります。

おすすめ記事