處理目錄樹中選定文件的命令行工具 的最佳實踐(界面和實現)是什麼?Python中遞歸控制檯工具的最佳實踐
我給那個在我腦海中的例子,但是我正在尋找一個「最佳實踐」:
flipcase foo.txt foo2.txt
可以處理foo.txt的,並保存結果作爲foo2.txt。
flipcase -rv *.txt
可以處理當前目錄中的所有文本文件。
-r
或--recursive
將包括所有子目錄。
-v
將在處理時打印一些信息到標準輸出。
的一個問題,我用這個例子中看到的是,該*.txt
參數 有時由shell(Unix和Vista)的擴展,所以走子目錄時,我不能應用此模式 。
我想原因是,在Unix上這些工具是通過調用find
, 來實現的,但這在Windows中似乎不常見。這也使得最後難以打印摘要。
要求:
- 必須在UNIX,Windows XP,Windows 7和Mac的
- 運行應該遵循這些平臺上的共同約定。 (是的,我知道,但我正在尋找一個合理的妥協。 例如它的確定在Windows上使用
-
而不是/
) - 不應單獨依靠find命令,如grep一樣。
- 必須適用於目錄 層級中的單個文件,文件模式和模式。
- 應該使用標準的Python庫,例如
OptionParser
和os.walk
。 - 可以處理多種圖案,例如,
*.txt,*.html
。
設計決定的其他問題:
- 應該採取什麼這個工具回報(狀態代碼)?
- 這個工具應該使用哪個ctrl-keys,以什麼方式處理?
- 應該支持stdin而不是單個文件嗎?可配置或 自動檢測?
- 應該支持輸出重定向嗎?可配置或自動檢測? 在這種情況下如何處理調試輸出?
- 模式應該是glob語法還是正則表達式?
- 是否有支持遞歸的通用模式語法? 也許
recursive:*.txt
在這種情況下,-r
選項不會是必要的。 - 創建修改文件備份的最佳做法是什麼? 選項
-b
,或者更確切地說是在默認情況下進行備份並添加--no-backup
選項 - 對於單個文件,應該可以指定目標文件名。怎麼樣?
- 應該打印什麼狀態信息,並熱配置? 默認情況下應該是冗長的,我們允許
-q
安靜嗎? 或者總是打印一點點,並允許-v
(或-vv
)提高這個或-q
到 完全閉嘴?
我真的不希望得到一個單一的正確答案,但可能是少數 想法和指向良好示例項目。
感謝您的全面輸入! – mar10 2010-09-06 21:20:39
您使用的選項名稱是「common」,即是否有使用它們的衆所周知的工具? – mar10 2010-09-06 21:27:16
@ mar10僅在某些情況下。 '-v'和'-r'選項通常用於詳細和遞歸。 '-i'選項反映了我的Perl背景,它用於就地文件編輯(Perl可能從'sed'繼承了這個約定)。我提出的更長的選擇只是粗略的想法。您可能需要查看其他遞歸Unix工具,瞭解有關選項命名的想法:'find','rsync',或許還有其他。 – FMc 2010-09-06 23:10:57