PowerShell 學習筆記 - 5 操做文件

PowerShell 學習筆記 - 5 操做文件

本章主要承接第4章中關於文件系統的話題,探討 PowerShell 中如何進行基本的文件操做等,也據此做爲第一部分的總結。ide

Location 與 Item

PowerShell 中將 UNIX 經常使用的 cd / pwd / pushd / popd 經過別名的方式提供了出來,也標識出路徑所對應的名詞應當是 Location函數

# PowerShell Core 下的導航
PS /> Get-Alias cd

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           cd -> Set-Location


PS /> Get-Alias pwd

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           pwd -> Get-Location
PS /> Get-Alias popd

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           popd -> Pop-Location


PS /> Get-Alias pushd

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           pushd -> Push-Location

Get-Location 所返回的對象並不包含詳細的做爲文件對象的信息,用於獲取詳細信息的的即爲 Get-ItemGet-ItemPropertypost

# Get-Location 返回的對象不包含詳細的文件信息,只是提供該 Location 相對於 Provider 下的信息
PS /root> Get-Location | Get-Member -MemberType Property
   TypeName: System.Management.Automation.PathInfo
Name         MemberType Definition
----         ---------- ----------
Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}
Path         Property   string Path {get;}
Provider     Property   System.Management.Automation.ProviderInfo Provider {get;}
ProviderPath Property   string ProviderPath {get;}

# Get-Item 用於獲取路徑對應的對象,其所攜帶的便該對象的詳細信息
PS /root> Get-Item -Path .| Get-Member -MemberType Property
   TypeName: System.IO.DirectoryInfo
Name              MemberType Definition
----              ---------- ----------
Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
CreationTime      Property   datetime CreationTime {get;set;}
CreationTimeUtc   Property   datetime CreationTimeUtc {get;set;}
Exists            Property   bool Exists {get;}
Extension         Property   string Extension {get;}
FullName          Property   string FullName {get;}
LastAccessTime    Property   datetime LastAccessTime {get;set;}
LastAccessTimeUtc Property   datetime LastAccessTimeUtc {get;set;}
LastWriteTime     Property   datetime LastWriteTime {get;set;}
LastWriteTimeUtc  Property   datetime LastWriteTimeUtc {get;set;}
Name              Property   string Name {get;}
Parent            Property   System.IO.DirectoryInfo Parent {get;}
Root              Property   System.IO.DirectoryInfo Root {get;}

經過 Get-ChildItem 亦可得到該路徑下的全部子對象,並可對其進行操做:學習

PS /> Get-ChildItem -Path .
    Directory: /
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----l           8/4/18  10:04 PM                bin
d-----          9/19/18   5:52 AM                dev
d-----          9/15/18   5:52 AM                etc
d-----          4/11/18   4:59 AM                home
d----l           8/4/18  10:04 PM                lib
d----l           8/4/18  10:04 PM                lib64
d-----          4/11/18   4:59 AM                media
d-----          4/11/18   4:59 AM                mnt
d-----          9/13/18  11:37 PM                opt
d-r---          9/19/18   5:52 AM                proc
d-r---          9/15/18   5:52 AM                root
d-----          9/18/18   3:51 AM                run
d----l           8/4/18  10:04 PM                sbin
d-----          4/11/18   4:59 AM                srv
d-r---          9/19/18   5:52 AM                sys
d-----          9/19/18   5:52 AM                tmp
d-----           8/4/18  10:04 PM                usr
d-----           8/4/18  10:04 PM                var
------           8/4/18  10:05 PM          12005 anaconda-post.log

# 從 ChildItem 中選取 Item
PS /> (Get-ChildItem -Path .)[0]
    Directory: /
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----l           8/4/18  10:04 PM                bin

# 也可附加 -Recursive 以進行遞歸搜索,這樣將獲取該路徑下的全部 Item
# 例如在 /opt 下有 526 個 Item
PS /> (Get-ChildItem -Path /opt -Recurse).Length
526

# 同時也可附加 -Include 以篩選部分須要的 Item
# 例如在 /opt 下面有 400 個 DLL 庫
PS /> (Get-ChildItem -Path /opt -Recurse -Include *.DLL).Length
400

文件(對象)操做

文件(對象)操做均依賴於 *-Item cmdlet 族:code

PS /tmp> Get-Command -noun item

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Clear-Item                                         6.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Copy-Item                                          6.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-Item                                           6.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Invoke-Item                                        6.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Move-Item                                          6.1.0.0    Microsoft.PowerShell.Management
Cmdlet          New-Item                                           6.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Remove-Item                                        6.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Rename-Item                                        6.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Set-Item                                           6.1.0.0    Microsoft.PowerShell.Management

文件或路徑等建立,可以使用 New-Item對象

# 建立 Directory 類型的文件,即爲目錄
PS /tmp> New-Item -ItemType Directory newDir
    Directory: /tmp
Mode                LastWriteTime         Length Name
----                -------------         ------ ----

# 建立 File 類型的文件,即爲普通文件
PS /tmp> New-Item -ItemType File newFile
    Directory: /tmp
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------          9/19/18   6:38 AM              0 newFile

# 建立 SymbolicLink 類型的文件,即爲符號連接
PS /tmp> New-Item -Name yum.log.link -Type SymbolicLink -Value ./yum.log
    Directory: /tmp
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-----l          9/19/18   6:42 AM             12 yum.log.link

文件或路徑等移動 / 複製 / 刪除 / 重命名等,可以使用 Move / Copy / Remove / Rename-Item遞歸

PS /tmp> Move-Item -Path ./newFile -Destination ./newDir/
PS /tmp> Copy-Item -Path ./newDir/newFile -Destination ./

# newDir 非空,因此在刪除時能夠加上遞歸,以省略到確認過程
PS /tmp> Remove-Item -Force ./newDir/

Confirm
The item at /tmp/newDir/ has children and the Recurse parameter was not specified. If you continue, all children will
be removed with the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):
PS /tmp> Remove-Item -Recurse ./newDir/

PS /tmp> Rename-Item -Path ./newFile -NewName nextFile
PS /tmp> Get-Item ./nextFile
    Directory: /tmp
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------          9/19/18   6:38 AM              0 nextFile

Invoke-Item 用於打開文件,主要見於 Windows 平臺,UNIX 平臺直接使用 CLI 調用二進制便可:ci

# 運行於 Windows 上,將打開 .log 格式綁定的默認應用程序
PS C:\Users\chuny> Invoke-Item  .\AMDRM_Install.log

Clear-Item 主要用於 Windows 平臺清理某個註冊表中的值集合,不經常使用。rem

操做文件屬性,依靠 Item 對象屬性相關的 getter / setter 函數,即 Get / Set-ItemPropertyget

PS /tmp> (Get-ItemProperty ./yum.log).IsReadOnly
False
PS /tmp> Set-ItemProperty ./yum.log -Name isReadOnly -Value $true
PS /tmp> (Get-ItemProperty ./yum.log).IsReadOnly
True
相關文章
相關標籤/搜索