再帰的なディレクトリ比較のスクリプト

この投稿では、テストと動作中のDjangoプロジェクトのディレクトリを比較するために書いた、シンプルだが非常に便利なpythonスクリプトを共有したいと思います。


問題


職場では、Djangoを使用して内部の問題を解決しています。 その結果、ほとんどの従業員と一緒にソフトウェアが作成されました。 サポート、オペレーター、当社の技術サービス(活動分野はテレコム)。

多くの場合、変更を加える必要がありますが、作業中のドラフトではすぐに変更できません。 エラーの可能性によるダウンタイムは非常に望ましくありません。 そのため、プロジェクトのコピーが作成され、すべての変更が最初に行われ、テスト後に、変更されたファイルが作業プロジェクトにコピーされます。

問題は、どのファイルが変更または追加されたかを覚えるのが難しいことであり、以前のように毎回ノートブックに書き込むのは効果的ではありません。

解決策


テストプロジェクトと作業プロジェクトのディレクトリを比較し、変更または追加されたファイルのリストをコンソール画面に表示するスクリプトを作成することにしました。 たとえば、 myprojectというテストディレクトリがあり、作業中のプロジェクトはイントラネットディレクトリにあります。 スクリプトを起動して、画面に表示します。

/var/django_projects/myproject$ ./cmp.py

[*] /var/django_projects/myproject/templates/base.html
[-] /var/django_projects/myproject/templates/calls/call_add.html
[*] /var/django_projects/myproject/templates/calls/call_edit.html
[*] /var/django_projects/myproject/site_media/main.css


変更されたファイル-[*]、新規(作業ドラフトにはありません)-[-]。 非常に便利:)

cmp.pyスクリプトのソースコード

  1. #!/ usr / bin / env python
  2. #------------------------------------------------- -----------
  3. #ディレクトリ「myproject」と「intranet」を再帰的に比較
  4. #------------------------------------------------- -----------
  5. os、filecmpのインポート
  6. #テストプロジェクトへのパス-このディレクトリからクロールを開始します
  7. dir_src = '/ var / django_projects / myproject'
  8. #このリストのファイルとディレクトリのみを比較します
  9. check_list =(
  10. '/ var / django_projects / myproject / apps /'
  11. '/ var / django_projects / myproject / templates /'
  12. '/ var / django_projects / myproject / scripts /'
  13. '/var/django_projects/myproject/site_media/main.css'
  14. ルート、dirs、os.walkのファイル(dir_src):
  15. ファイル内の名前:
  16. f_src = os.path.join(ルート、名前)
  17. need_check = f_src.startswith(check_list)
  18. f_src.endswith( '.pyc'では なく need_checkの場合
  19. f_dst = f_src.replace( "myproject""イントラネット"
  20. os.path.exists(f_dst)でない 場合
  21. 「[-]」 、f_srcを出力します
  22. filecmp.cmpでは なく elif(f_src、f_dst):
  23. 「[*]」 、f_srcを出力します


コードからわかるように、主な作業はos.walkメソッドによって行われ、 os.path.existsfilecmp.cmpはそれぞれ存在の確認とファイルの比較に使用されます。

それがすべてです、誰かが便利になることを願っています:)

UPD:バージョン管理システムに関する別のコメントを書く前に、ブログの名前に注意してください:)それにもかかわらず、このトピックに既に触れたすべての人のおかげで、私は絵を完成させることが有用だと思います。

Source: https://habr.com/ru/post/J50152/


All Articles