介紹
在 Linux 上,我經常使用這樣的方法來查看包含許多檔案的目錄中最近更改的檔案:
ls -t | head
我可以在類似的 PowerShell 中執行以下操作:
Get-ChildItem | Sort-Object -Property LastWriteTime | Select-Object -Last 15
這有點長,所以我有以下內容$PROFILE:
function Recent ()
{
Get-ChildItem | Sort-Object -Property LastWriteTime | Select-Object -Last 15
}
也許還有:
Set-Alias lst Recent
或者
Set-Alias ls-t Recent
作為較短的變體。
題
是否有一種內置方法來列出最近更改的檔案,它比我上面顯示的方法更簡潔?
你們還有其他一些最佳實踐推薦嗎?
uj5u.com熱心網友回復:
正如評論中已經提出的,您可以從:
Get-ChildItem | Sort-Object -Property LastWriteTime | Select-Object -Last 15
到
gci | Sort-Object LastWriteTime |Select -l 15
什么在起作用?
- gci 是
Get-ChildItem. 要查看所有可用的別名,您可以輸入Get-Alias當前會話。 Sort-Object LastWriteTime使用位置引數。將未命名的引數提供給 Powershell cmdlet 時,它會映射到第一個位置引數。Select -l 15-l代表-last. 之所以可行,是因為在獲取不存在的引數時,Powershell 會嘗試將其映射到最接近的匹配引數。在Select-Objectcmdlet可用的所有引數中,僅-last可以匹配(該 cmdlet 沒有其他引數以字母 L 開頭。請注意,在這種情況下,l沒有定義為 的別名last。它是 Powershell 引數消歧。
最佳實踐
你在你的會話中所做的留在你的會話中。您可以隨意使用別名、引數消歧。
話雖如此,在開發腳本或模塊時,您應該完全避免使用別名、消除歧義的引數和位置引數。
可能發生的某種問題。
如果 cmdlet 引入另一個可能匹配的引數,則引數消歧可能會失敗。例如Get-Service -inputObject something作業良好。Get-Service -in "test"會失敗,因為它是模棱兩可的。-in能配-inputObject也能-include。雖然Get-Service -inp "test"可以作業,但與簡單地使用完整的引數名稱相比,它的可讀性不是很強。
別名可能無法跨平臺使用。例如,雖然在 Windows 中sort作為別名作業sort-object,但在 Linux 中則不然(因為它是那里的本機命令)。這種區分可能會產生意想不到的結果并根據背景關系破壞您的腳本。此外,將來可能會洗掉一些別名,它們確實會降低腳本的可讀性)
最后,在腳本和模塊中也應該避免位置引數。使用命名引數將使您的腳本對每個人都更加清晰易讀。
總而言之,在會話中作業時,您可以隨意使用別名、引數消歧和位置引數,但在處理腳本或模塊時,應避免使用它們。
參考
選擇物件
選擇物件 [-InputObject ] [[-Property] <Object[]>] [-ExcludeProperty <String[]>] [-ExpandProperty ] [-Unique] [-Last ] [-First ] [-Skip ] [-Wait ] []
Cmdlet 引數的型別
位置引數只要求您按相對順序鍵入引數。然后系統將第一個未命名引數映射到第一個位置引數。系統將第二個未命名引數映射到第二個未命名引數,依此類推。默認情況下,所有 cmdlet 引數都是命名引數。
Powershell 引數消歧和驚喜
例如,您可以說 Get-ChildItem -R,而不是說 Get-ChildItem -Recurse。Get-ChildItem 只有一個以字母 'R' 開頭的(非動態)引數。由于只有一個引數匹配,PowerShell 認為您一定是指那個。作為旁注,像 -ReadOnly 這樣的動態引數是在運行時創建的,并且處理方式略有不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370385.html
標籤:电源外壳
