2014-03-30 63 views
3

我經常想對當前目錄中最近的文件執行一個功能。基本上我想要一個更通用的方法到open last modified file in the directory using vi當前目錄中最後一個文件的全局別名

我能寫的zsh一個全球性的別名,做什麼,我需要的部分:

alias -g lafi='`ls -rt|tail -n 1`' 

現在,我可以執行類似

cat lafi 

,我會看到的內容當前目錄中的最新文件。或者我可以發出echo lafi來找出最後一個文件是什麼(或者我甚至可以說ls -rt|tail -n 1)。

有沒有辦法修改別名定義,以便輸出最後一個文件(到STDERR?),然後像上面lafi那樣把它傳遞給命令行中的進一步消耗?所以對於上述cat lafi我希望這個輸出。

last file: <name of last-file> 
<content of last-file> 

我懷疑這涉及tee但我的殼功夫不足夠詳細討論這一點。

+1

'zsh'允許更高效的命令'print *(。Om [-1])'來替換管道。這也更安全,因爲它避免瞭解析包含換行符的文件名失敗的'ls'輸出。 – chepner

+0

你可以將此工作納入答案,然後我可以接受嗎? – DrSAR

+1

只要考慮一下Glenn的回答就可以了:'alias -g lafi ='$(print *(。om [1])| tee ...)''。 – chepner

回答

3

也許

alias -g lafi='`ls -rt | tail -n 1 | tee >({ printf "last file: "; cat; } >&2)`' 

我想的zsh具有工藝替代這樣。

+0

效果非常好。 – DrSAR

+0

這樣做的一個問題是,'echo lafi 2>/dev/null'將不會*壓制「最後一個文件」註釋,因爲'tee'命令從shell繼承了它的標準錯誤;本地重定向不適用。只是要注意取決於用例。 – chepner

相關問題