0
#!/bin/bash
# create a list of checksums
cat /dev/null > MD5SUM
for i in */*/*.sql ; do test -e $i && md5sum $i >>MD5SUM ; done

次に、次のコマンドを使用して、何かが変更されたかどうかを確認します。

md5sum -c MD5SUM

それはうまく動作します。方法がよくわかりません。ホームディレクトリ内のすべてのファイルのチェックサムリストを作成したい場合、どうすれば$HOMEよいでしょうか? */*/*.sqlfor ループの部分はどういう意味ですか? SQLファイルのみを表示することを想定していますが、どうすれば変更できますか? ディレクトリ内のすべてのファイルが必要だとしますか? なぜそれだけではないの*.sqlですか?この場合、残りの for ループは何をしますか?

4

1 に答える 1

4

部分的に行きましょう:

cat /dev/null > MD5SUM

これは、以前に作成された以前の MD5SUM ファイル/リストのみを「消去」します。

for i in */*/*.sql;

これは、現在のフォルダーから 2 つのディレクトリの深さのファイルを反復処理します。フォルダがある場合

~/a/b
~/c/d
~/e/f

スクリプトをホーム フォルダー (~) で実行すると、ディレクトリ b、d、f 内のすべての "*.sql" のチェックサムが計算され、現在のディレクトリ内のファイル MD5SUM にパイプされます。

do test -e $i && md5sum $i >>MD5SUM ; done

今あなたの質問に答えます:

  1. ホーム ディレクトリ $HOME 内のすべてのファイルのチェックサム リストを作成したい場合、どうすればよいでしょうか。

exec オプションを指定して find コマンドを使用します。

find $HOME -maxdepth 1 -name \*.sql -exec md5sum {} \;
  1. for ループの/ /*.sql 部分はどういう意味ですか?

私は上で答えましたが、とにかく、ファイルに到達する前に2つのディレクトリの深さしか行きません。

  1. SQLファイルのみを表示することを想定していますが、どうすれば変更できますか? ディレクトリ内のすべてのファイルが必要だとしますか?

変化する

for i in */*/*.sql;

for i in */*/*;

または現在のディレクトリの場合

find $HOME -maxdepth 1 -name \* -exec md5sum {} \;
  1. *.sql だけではないのはなぜですか? この場合、残りの for ループは何をしますか?

前に説明しました。

それが役立つことを願っています=)

于 2012-04-19T01:56:52.663 に答える