3

質問:

Linuxでファイルの進行状況を追跡する方法はありますか(つまり、新しいファイル/ファイルの保存)?

詳細:

ファイルの作成、削除、変更のためにフォルダ全体を追跡するために使用できるinotifyを知っています。ただし、それらは非常に低レベルです。多くの場合、テキストエディタはファイルを保存するときに、変更されたバッファを一時的な場所に書き込んでから、それを移動して元のファイルを上書きします。これは、inotifyによって、私が欲しいのが。である場合にaCREATEおよびaとして表示されます。MOVEMODIFY

ファイルが保存されるたびに新しいファイルとして解釈されることは、私には直感に反しているように思われます。新しいファイルを作成することと既存のファイルを保存することを区別するために使用できるファイルの識別値はありますか?この質問をする別の方法は、「BeagleSpotlightWindows SearchGoogleデスクトップなどのプログラムはこの問題をどのように回避するか」です。

ゴール:

これが私が欲しいものを説明する良い方法です:を使用しVimて、ファイルを開いて保存すると(:w)、そのファイルは一時ファイルに書き込まれ、次に元のファイルに移動されinotify、完全に新しいファイルであると信じ込ませます作成され、元のファイルを上書きするために使用されました。ただし、ファイルをsubversion(svn)に追加し、そのファイルをで開いてVim保存すると(:w)、svn保存されたファイルは実際には変更されたファイルであり、新しいファイルではないことがわかります。どうやっsvnてこれを知るのですか?

4

2 に答える 2

2

Linuxでも新規または保存は同じように見えるかもしれませんが、説明しようと思います。LinuxとWindowsの大きな違いの1つは、iノードではファイル作成時間が保存されず、アクセス、変更(ファイルの内容の変更)、および変更(inodeの変更)の時間のみが保存されることです。したがって、ファイル自体の内部など、他の場所に情報をメタデータとして保持しない限り、ファイルが作成されたばかりなのか、変更されたばかりなのかを判断することはできません。

于 2012-05-10T21:37:15.160 に答える
1

johnshen64は、変更されたものとして表示されない理由を回答しました。SVN(またはGit)に関しては、すでに管理されているファイルの「キー」を保持しているため、ファイルが変更されたものとして認識されます。

したがって、データベースについても同じことを行う必要があります。たとえば、ファイル名からの単純な数値ハッシュ(またはファイル名自体ですが文字列の比較は遅い)を使用し、ファイルを追加する前にファイルがすでに管理されているかどうかを確認するために迅速なクエリを実行できます。

于 2012-05-11T10:45:54.110 に答える