4

こんにちは私は、すべてのファイルのmd5sumを取得してテキストファイルに書き込みたいディレクトリで、どのファイルが変更されているかを確認しています。次に、ファイルが変更されたことを知った後、それを再度実行して、出力ファイルを比較して、正確に何が変更されたかを確認できるようにします。これが私が試したものですが、必要に応じて機能しません。

また、サブディレクトリを含むフォルダ内のすべてのファイルのmd5sumを取得する必要があるだけでなく、シンボリックリンクをたどらないようにする必要があります。

#!/bin/bash
#

cd /sys/class
for i in $(find . -type f)
do
    ls -lt "$i" >> /home/george/Desktop/before.txt
done
echo "Finished!"

助けてくれてありがとう

===編集===

実際のパスを隠す必要がないので、実際のパスを入れました。とにかくこれを実行すると、フォルダ内のファイルであるいくつかのファイル(以下の出力ファイル)のみが返されました。これは、サブディレクトリに移動せず、それらのファイルも検索しないことを意味します。ところで申し訳ありませんが私のbashはとても錆びています

--w------- 1 root root 4096 Jun 20 03:03 ./gpio/export
--w------- 1 root root 4096 Jun 20 03:03 ./gpio/unexport
-rw-r--r-- 1 root root 4096 Jun 20 03:03 ./firmware/timeout
-r--r--r-- 1 root root 4096 Jun 20 03:04 ./drm/version

=== Edit2 ===

これらのファイルの一部が見つからない理由が正確にはわかりません。たとえば、/ sys / class / backlight / intel_backlight / brightness

そして、そのような他の多くの人は、何らかの理由で見つからないファイルがたくさんあります

4

2 に答える 2

14

これcdは不要でありtype -f、実際にはすでにシンボリックリンクをバイパスしています。したがって、ループも不要です。

find /path/to/directory -type f -exec md5sum {} + >before.txt

find年齢が高すぎてサポートできない場合は、代わりに-exec {} +試してみてください。-exec {} \;

比較のためmd5sumに、同じ行を削除してみてください。

fgrep -vxf before.txt after.txt | less

before.txtこれは、のリストがに収まると想定していfgrepます。しかし、数万のファイルトップを扱っている場合は、おそらく対処できます。ただし、これはから削除されたファイルを識別しませんbefore.txt

于 2012-06-20T07:55:34.853 に答える
0

ファイルリストのサイズが十分に小さいため、すべてをメモリ内で実行できる場合は、before.txtをハッシュで並べ替えることを検討してください。同じことを行うとafter.txt、ファイル名が変更された場合でも、各ファイルを1行ずつ移動して、一致するものを特定できます。また、削除または追加されたファイルをスキップして、解釈する必要がある場合よりも問題が少なくなる可能性があります。diff before.txt after.txt

ファイル変更日を使用することがオプションである場合、あなたができることはls -lt | head、最新のファイルを除外してそれを保持するために使用することです。次に、変更を確認する場合はls -lt、保存した日付よりも新しいものをもう一度確認します。これはファイルリストのサイズに関係なくうまく機能するはずですが、最終変更日を変更する人に対して脆弱になります(root権限が必要になります)

于 2012-06-20T07:47:48.730 に答える