2017-09-13 18 views
0

私は質問があります。それは私の宿題の一部であり、私は実際にそれをする方法を知らない。 ディレクトリのツリーとsumy.md5というファイルを含むアーカイブがあります。このツリーのすべてのファイルを検索し、チェックサムがsumy.md5ファイルにあるかどうかをチェックする必要があります。彼らは私は別のディレクトリに移動する必要がある場合。 ファイルのチェックサムがファイルsumy.md5にあるかどうかを誰かが私に教えてくれれば非常に感謝します。Unix。ディレクトリ内のすべてのファイルとそのサブディレクトリのチェックサム

これまでに試したコードです。

for f in (find ./AA/* -type f) 
while read -r file; 
do 
b=$(md5sum $file | cut -d' ' -f1) 
if [ $a == $b ] then 
    echo "Found It" 
    else echo "File not found" 
fi 
done < sumy.md5 
+0

これまでに何を試しましたか?これは、ストレートフォワードbashスクリプトがfのために – BurnsBA

+0

(find ./AA/* -type f) を読み込み、-rファイルを読み込んでいるように思えます。 B = $(のmd5sum $ファイルを| -dカット」 '-f1)を行う [$ ==ます$ B] ならば、 エコー他 は< Fiの 済 "ファイルが見つかりません" エコー "これは発見" sumy.md5 –

+0

コードを書くことは宿題の一部です。時には見落とされるのは、問題を小さな部分に分割するスキルです。あなたの宿題には、(1)ディレクトリツリーを調べること、(2)ファイルのmd5をチェックすること、(3)ファイルを移動するかどうかを決定すること、および(4)ファイルを移動することが含まれます。どの部分に問題がありますか? – stealththeninja

答えて

1

スクリプトにはいくつかの問題があります。

# the following line has a syntax error (missing "$") 
# but it's also not used in the loop 
for f in (find ./AA/* -type f) 
# syntax error here trying to jump into the while loop 
while read -r file; do 

    b=$(md5sum $file | cut -d' ' -f1) 

    # the variable "a" is never defined 
    if [ $a == $b ] 
    then 
     echo "Found It" 
    else 
     echo "File not found" 
    fi 
done < sumy.md5 

は上記そして、ディレクトリ(間違って)内のファイルを反復処理sumy.md5ファイル内のすべての行を反復処理するようだ:あなたのコメントや書式設定をコピーします。 md5sumからmd5の内容が出力された場合は、おそらく--checkオプションを使用することができますが、そうでない場合はgrepのようなものを使って内容を検索するほうが簡単です。

for file in $(find ./AA/* -type f) 
do 
    b=$(md5sum $file | cut -d' ' -f1) 

    # "q" just exits with status code, 0 or 1 on found or not 
    # "i" says to ignore case 
    if grep -qi "$b" "sumy.md5" 
    then 
     echo "Found It" 
    else 
     echo "File not found" 
    fi 
done 

見つけ、どんなディレクトリにファイルをコピーするcp --parentsまたは多分rsyncのようなものを使用している場合、それはまた、手動でそれに対処することなく、必要なディレクトリ構造を作成します。

+1

ありがとうございます:)あなたのバージョンはより良くて簡単です。これは本当に役に立ちます。私はgrepについても考えなかった。私はコードを貼り付けるのに適切なフォーマットを使用する方法を学びますが、私の試験は始まっています。今は本当に多くの時間がありません。もう一つ問題があります。また、移動したファイルへのシンボリックリンクを作成する必要があります。シンボリックリンクにあるパスは、相対パスでなければなりません。 –

関連する問題