2012-04-19 9 views
1

異なるディレクトリ内の同じ名前の2つのファイルを比較したいとします。 $ 1と$ 2は2つのディレクトリです。同じ名前のファイルがある場合、私は確認することができますが、その後、私は2番目のファイルを取得する方法がわからない...ファイル名が与えられた場合、シェル内のディレクトリからファイルを取得する方法

cd $1 
    for i in `ls` 
do 
if [ -f $2/$i ] 
then 
    echo "find it in another directory" 

    GET THE OTHER FILE IN $2, THEN COMPARE THEM 

    cmp -s $i THE OTHER FILE 
    if [ $? = 0 ] 
     echo "they are same" 
    else 
     echo "they are different" 
    fi 
fi 
done 
+0

通信名 – kev

答えて

1

を最も簡単な問題は引数にスペースだろう - 修正するのは簡単、たったの$ 1、$ 2引用します

if [ -f "$2/$i" ] 

しかし、私は問題はあなたが

ソリューション1)絶対パスを使用します(これが相対パスである場合)$ 2が無効であることを意味している$ 1、にCDingされていることである疑いがある(例:/スタッフ/ bathpp /もの/ dir2)

解決策2)相対パスが必要な場合は、ジャンプする前に現在のディレクトリを取得します。

origDir=`pwd` 
... 
path2="$origDir/$path2" 

個人的に私はいくつかのチェックをして、両方のために働いた。

+0

よろしくお願いします。ありがとうございます。もう一つは、私はまだ2番目のファイルを取得する方法がわからない、私はシェルに新しい、私はgrepを探してみました、両方とも動作しませんでした。私はそれを比較できるようにそのファイルを取得する方法を知らない。 –

+0

"get"の意味が分からない - $ 2が絶対パス "$ 2/$ i"であればそれを "取得"します。 $ 2が相対パスであれば、 "$ origDir/$ 2/$ i" – John3136

0
for FIRST in $1/* 
do 
    SECOND=$2/$(basename "$FIRST") 
    if [ -f "$SECOND" ]; then 
     diff --brief "$FIRST" "$SECOND" 
    fi 
done 

N.B. diff --briefは、異なる場合にのみ出力します。実際の相違点を確認する場合は、--briefを削除してください。

関連する問題