1

ファイル/ディレクトリに関する情報を保存する端末アプリを作りたいと思っています。ファイルが移動または名前変更された場合に情報を保持する方法が必要です。

私ができると思ったのは、コマンドが実行される前に関数を実行することです。私はこれを見つけました:

http://www.twistedmatrix.com/users/glyph/preexec.bash.txt

でも、これでいいのかな?と思っていました。または、何か他のことをする必要がありますか?

mv が入力されるたびに、Cプログラムからその関数を呼び出したいと思います。

4

4 に答える 4

1

何らかのメタデータをファイルに添付しようとしている場合、それを行うためのはるかに優れたサポートされている方法があります -拡張属性

別の解決策は、ファイルの inode 番号を、自分で管理しているデータベースへのインデックスとして使用することです。

于 2012-05-23T23:53:25.280 に答える
0

DEBUG trapを Bash で利用できる場合があります。

からman bash:

sigspec が DEBUG の場合、コマンド arg は、すべての単純コマンド、for コマンド、case コマンド、select コマンド、すべての演算 for コマンド、およびシェル関数で最初のコマンドが実行される前に実行されます。

于 2012-05-24T03:05:30.050 に答える
0

mv コマンドのエイリアスを作成できますか? .profile または .bashrc で

alias mv=/usr/bin/local/mymv

ここで、mymv は、C コード関数を実行して /usr/bin/mv を呼び出すコンパイル済み実行可能ファイルです。

precmd と preeexec は、スクリプトが mv を呼び出さない場合でも、実行されるすべての bash スクリプトにいくらかのオーバーヘッドを追加します。エイリアスの欠点は、/usr/local に新しいコードが必要であり、スクリプトまたはユーザーが mv の代わりに /usr/bin/mv を使用すると、必要なことが実行されないことです。一般に、このようなことを行うことは、ある種のサービス (デーモン) またはドライバーで問題を処理するためのより良い方法があることを意味します。さらに、C コードが次のような興味深い入力を正しく処理できない場合はどうなりますか?

mv somefille /dev/null
于 2012-05-23T23:45:35.220 に答える
0

ターミナルで何らかのコマンドが実行された後に毎回コマンドを実行したい場合は、次のように入力して~/.bashrcください:

PROMPT_COMMAND="your_command;$PROMPT_COMMAND"

mv が実行される前に毎回コマンドを実行する場合は、次のように入力し~/.bashrcます。

alias mv="your_script"

必要に応じて、スクリプトが実際に実行されることを確認してくださいmv

inotifyライブラリを使用して、ファイルシステムの変更を追跡できます。これは良い解決策ですが、ユーザーがファイルを削除すると、それはすでになくなっています。

于 2012-05-23T23:45:50.883 に答える