Windows linux PowerShell

【Linux】【Windows】ファイル一覧取得方法

あるフォルダのファイル一覧を取得する場合、
linuxコマンドではgrepを使えばいいのですが、Windowsの場合はどう使えばいいのかわからなかったのでメモ

フォルダ階層イメージ

[text]
test
│ test1.txt

├─folder1
│ │ test11.txt
│ │ test12.txt
│ │
│ └─folder11
│ test111.txt

└─folder2
test21.txt
[/text]

 

相対パスで取得

linux

linuxの場合、findで取得できます。

[bash title="相対パスファイル一覧" highlight="1"]
find ./ -type f
./folder1/folder11/test111.txt
./folder1/test11.txt
./folder1/test12.txt
./folder2/test21.txt
./test1.txt
[/bash]

 

Windows

Windowsの場合、PowerShellの「Get-ChildItem」を使えばfindと同じように使えます。

ただし、findと違い、「./」は表示されません。

[powershell title="相対パスファイル一覧" highlight="1"]
Get-ChildItem ./ -Recurse -Name
folder1
folder2
test1.txt
folder1\folder11
folder1\test11.txt
folder1\test12.txt
folder1\folder11\test111.txt
folder2\test21.txt
[/powershell]

 

PowerShellのコマンドは省略して書くことができます。Linuxに慣れてるとこっちのほうが書きすいかもです。

[powershell title="相対パスファイル一覧(省略形)" highlight="1"]
gci -r -n ./
folder1
folder2
test1.txt
folder1\folder11
folder1\test11.txt
folder1\test12.txt
folder1\folder11\test111.txt
folder2\test21.txt
[/powershell]

絶対パスで取得

Linux

findのパス指定を絶対パスにすると出力結果も絶対パスになります。

[bash title="絶対パスファイル一覧" highlight="1"]
find /mnt/c/test -type f
/mnt/c/test/folder1/folder11/test111.txt
/mnt/c/test/folder1/test11.txt
/mnt/c/test/folder1/test12.txt
/mnt/c/test/folder2/test21.txt
/mnt/c/test/test1.txt
[/bash]

findの相対パスからでも絶対パスで出力させたい場合は、pwdを使えばいけます。

[bash title="絶対パスファイル一覧(pwd使用版)" highlight="1"]
find `pwd` -type f
/mnt/c/test/folder1/folder11/test111.txt
/mnt/c/test/folder1/test11.txt
/mnt/c/test/folder1/test12.txt
/mnt/c/test/folder2/test21.txt
/mnt/c/test/test1.txt
[/bash]

「-type f」⇒「-type d」にしたらディレクトリ一覧
「-type f」を取り除いたらファイル+ディレクトリ一覧になります。

 

Windows

Windowsもフルパスで取得する場合はいくつか取得方法があります。

Format-Table

Format-Table(省略:ft)を使うことでフルパスの取得ができます。
前後に改行が出力されるので改行不要な場合、トリミング等の処理が別途必要になります。

[powershell title="Format-Tableを使った絶対パスファイル一覧" highlight="1"]
gci -r|Where-object {$_ -is [System.IO.FileInfo]}|ft -a FullName -HideTableHeader

C:\test\test1.txt
C:\test\folder1\test11.txt
C:\test\folder1\test12.txt
C:\test\folder1\folder11\test111.txt
C:\test\folder2\test21.txt

[/powershell]

 

Select-Object

Select-Object(省略:select)を使うことでフルパスの取得ができます。
Format-Tableとは違い上下の改行は出力されません。

[powershell title="Select-Objectを使った絶対パスファイル一覧" highlight="1"]
gci -r|Where-object {$_ -is [System.IO.FileInfo]}|select -Expandproperty FullName
C:\test\test1.txt
C:\test\folder1\test11.txt
C:\test\folder1\test12.txt
C:\test\folder1\folder11\test111.txt
C:\test\folder2\test21.txt
[/powershell]

 

フォルダ名のみ出力する方法

真ん中の「Where-object {$_ -is [System.IO.FileInfo]}」を「Where-object {$_ -is [System.IO.DirectoryInfo]}」に変更するとフォルダ名も出力します。

[powershell title="ディレクトリ名のみ出力する方法" hightlight="1"]
gci -r|Where-object {$_ -is [System.IO.DirectoryInfo]}|select -Expandproperty FullName
C:\test\folder1
C:\test\folder2
[/powershell]

 

フォルダ名も出力す方法

真ん中の「Where-object {$_ -is [System.IO.FileInfo]}」を「?{$_.Length -ne $null}」に変更するとフォルダ名も出力します。

[powershell title="ディレクトリ名とファイル名を出力する方法" hightlight="1"]
gci -r ./| ?{$_.Length -ne $null}| select -ExpandProperty FullName
C:\test\folder1
C:\test\folder2
C:\test\test1.txt
C:\test\folder1\folder11
C:\test\folder1\test11.txt
C:\test\folder1\test12.txt
C:\test\folder1\folder11\test111.txt
C:\test\folder2\test21.txt
[/powershell]

ファイル名のみの取得

Linux

Linuxの場合、find+basenameを使うことでファイル名のみ取得することができます。
ただし、パイプラインのみで繋ぐことができない為、xargsコマンドで橋渡しします。

[shell title="ファイル名のみの取得" hightlight="1"]
find ./ -type f | xargs -I {} basename {}
test111.txt
test11.txt
test12.txt
test21.txt
test1.txt
[/shell]

「-type f」⇒「-type d」にしたらディレクトリ一覧
「-type f」を取り除いたらファイル+ディレクトリ一覧になります。

 

Windows

フルパス取得時に記載したコマンドから「FullName」⇒「Name」に書き換えるだけです。

Format-Table

Format-Table(省略:ft)を使うことでフルパスの取得ができます。

[powershell title="Format-Tableを使う方法" highlight="1"]
gci -r|Where-object {$_ -is [System.IO.FileInfo]}|ft -a Name -HideTableHeader

test1.txt
test11.txt
test12.txt
test111.txt
test21.txt

[/powershell]

 

Select-Object

Select-Object(省略:select)を使うことでフルパスの取得ができます。

[powershell title="Select-Objectを使う方法" highlight="1"]
gci -r|Where-object {$_ -is [System.IO.FileInfo]}|select -Expandproperty Name
test1.txt
test11.txt
test12.txt
test111.txt
test21.txt
[/powershell]

 

フォルダ名のみ出力する方法

真ん中の「Where-object {$_ -is [System.IO.FileInfo]}」を「Where-object {$_ -is [System.IO.DirectoryInfo]}」に変更するとフォルダ名も出力されます。

[powershell title="ディレクトリ名のみ出力する方法" hightlight="1"]
gci -r|Where-object {$_ -is [System.IO.DirectoryInfo]}|select -Expandproperty Name
folder1
folder2
folder11
[/powershell]

 

フォルダ名も出力す方法

真ん中の「Where-object {$_ -is [System.IO.FileInfo]}」を「?{$_.Length -ne $null}」に変更するとフォルダ名も出力されます。

[powershell title="ディレクトリ名とファイル名を出力する方法" hightlight="1"]
gci -r ./| ?{$_.Length -ne $null}| select -ExpandProperty Name
folder1
folder2
test1.txt
folder11
test11.txt
test12.txt
test111.txt
test21.txt
[/powershell]

 

-Windows, linux, PowerShell
-, , ,

© 2020 かえでBlog