• ベストアンサー

powershellでlinuxのduコマンドのような事がしたい。

powershellでlinuxのduコマンドのような事がしたい。 linuxのduコマンドはディレクトリの容量を知ることができますが、 同じ事をwindowsのpowershellで出来ないでしょうか。

  • ngwave
  • お礼率65% (240/366)

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

PowerShell には du のようなディレクトリサイズを量るコマンドはなかったと思うので、自分で作るしかないでしょう。こんなんでどうですか? Get-ChildItem -Recurse -Force | ForEach-Object -Begin { $i = 0 } -Process { $i = $i + $_.Length } -End { $i }

ngwave
質問者

補足

ありがとうございます。 実行してみたところ、 結果は 454,932,877 実際のcドライブの使用容量は 78,522,511,360 大きくかけ離れました。 折角なので、どうにか使えないものかと試してみたところ、 -Pathで指定した場所の容量は正しく出てそうでした。 Get-ChildItem -Path "c:\Documents and Settings" -Recurse -Force | ForEach-Object -Begin { $Len = 0 } -Process { $Len = $Len + $_.Length } -End { $Len } 結果は 1,271,990,831 実際の"c:\Documents and Settings"の使用容量も 1,271,990,831 謎解きに時間が掛かってしまいましたが、こういう事でしょうか?

その他の回答 (2)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

あ、-Path の指定忘れてましたね……。(汗 おっしゃる通り、-Path で指定したディレクトリの中にあるファイルの合計サイズが出ます。(指定しないとカレントディレクトリ内) ちなみにディスクドライブ全体のサイズは Get-PSDrive コマンドで出るみたいですね

ngwave
質問者

お礼

ありがとうございます。 あ、そうか! カレントでしたか。 言われてみると普通のことですが、何の値か分からずにしばらく困っていました。 Get-PSDrive コマンドも試したした。 これはこれで別途使えそうなので、ありがとうございます。

回答No.1

#普段Windows XPしか使ってないのでLinuxのコマンドよくわかりません。 #PowerShell標準のコマンドにはなさそうだったので、ゴリゴリとコードを書くハメに。プログラミングそのものなので、人によってはperlとかphpとか使いたくなるんじゃね、とか思った。面倒なので各種オプションは実装してないし、ファイルにしてコマンドライン引数受け取ったりしてないけど、プログラミングが出来ればそんなに難しくはないでしょう。 #自力実装したけどぶっちゃけ誰かが既に作ってそうな気がします。 ====================コード================= $dict = New-Object -typeName "System.Collections.Generic.Dictionary``2[System.IO.FileSystemInfo,System.Int64]" $rd = New-Object -typeName "System.IO.DirectoryInfo" -argumentList "D:\himajin100000\x86\Environment\Application" foreach($d in $rd.GetDirectories("*",[System.IO.SearchOption]::TopDirectoryOnly)){ $x = 0 foreach($f in $d.GetFiles("*",[System.IO.SearchOption]::AllDirectories)){ $x = $x + $f.Length } $dict.Add($d,$x) } foreach($f in $rd.GetFiles("*",[System.IO.SearchOption]::TopDirectoryOnly)){ $dict.Add($f,$f.Length) } foreach($kv in $dict.GetEnumerator()){ [System.String]::Format("{0:s} {1:d}",$kv.Key,$kv.Value) } =================結果================== Archiver 83836 b2x 875008 Development 26622315 Documents 265807804 Images 84152605 Mail 87406143 Management 19092745 TextEditor 1793048 aaa.txt 105 ==============その他================ 以下を参考にしましたが、Lengthプロパティを合計する、という実装になっており 以下のコードを実際に使ってみたところ、Lengthが全て空になっている状況、つまりフォルダしか存在しないディレクトリの内容を表示させようとしたとき、例外が発生し(フォルダとファイルが混在するものはOKでした)、何故かこれをうまく捕捉出来なかったので自力実装しました。 https://www.microsoft.com/technet/scriptcenter/resources/pstips/apr08/pstip0404.mspx 尚、"D:\"を直接指定したら"D:\System Volume Information"フォルダへのアクセス権を持たないために刎ねられてしまいました(汗 その他、PowerShellって.NET 4.0のメソッドとか使えないみたいね。System.IO.DirectoryInfo.GetFilesとかは最後まで値を求めないと制御が戻らないため、コードによってはSystem.IO.DirectoryInfo.EnumerateFiles何かは結構使いそうなものですが。

ngwave
質問者

お礼

ありがとうございます。 o/sが変わればコマンド1つで出来ることも結構大変な事になってしまうのですね。

関連するQ&A

  • linux duコマンドで困っています。

    linuxでディレクトリ容量を計算したいので duコマンドを使うのですが、10分以上反応がありません。 ちなみにディレクトリに10万以上のファイルがあります。総計を知りたいのですが、良いオプションやコマンドがあれば教えてください。 du -hcx /directory このコマンドでは駄目 個別ファイルの容量は知りたくないのでcオプションを付けています。 本当に困っています。 何卒よろしくお願いいたします。

  • Linuxコマンドの『du』について

    宜しくお願いします。 アップロードした画像ファイルの容量を調べたく、サーバにroot権限でログインし、Linuxコマンドの 『du -b imgfile』 で調べたのですが、FFFTPで見た容量と、Linuxコマンドの 『ls -l imgfile』 で調べた容量と誤差が出ます。具体的には、duコマンドで調べた容量が 24576Byte なのに対し、同じファイルをFFFTPで見たのと、lsコマンドで調べた場合は、 22019Byte という具合に、誤差が出ます。 容量の大きなファイル程、その差も大きくなります。 この問題を解決する方法をご存知でしたら、是非ご教授下さい。 宜しくお願い致します。

  • duコマンドの置換えについて

    こんばんは。 linux初心者で困っています。助けてください。 ディレクトリのサイズを得たいのですが、 組み込みなので、system関数でのduコマンドを実行すると、 エラーなどが拾えないため使用したくありません。 どうやったら、ディレクトリのサイズを得ることができますか? 具体的な設定方法をご教授願います。 よろしくお願い致します。

  • PowerShellでテキスト内にコマンド表示させるには

    powershellでテキスト内にコマンド結果を表示させるにはどうすればよいでしょうか? 例えば以下のコマンドで、 echo "### date ###" ↓このように表示させたいのですが ### 2010年1月18日 12:00:00 ### Linuxでいうバッククォーテーション(``)なのですが powershellだとどういう方法なのでしょうか?

  • duコマンド

    fedora4 homeディレクトリ以下の 各ユーザーディレクトリごとの使用量を MB単位で知りたいのですが、 どういうコマンドになるでしょう。 モノの本にはdu -h でいいと書いていますが、 サブフォルダの詳細まで出てきてしまいます。 各ユーザのディレクトリ合計使用量(MB単位) ディレクトリの場所(home/username) という単位で表示したいのですが、可能でしょうか。 よろしくお願いします

  • コマンドプロンプトとpowershell

    コマンドプロンプトとpowershell 最近,コマンドプロンプトとかpowershellの勉強をしたいと思っているのですが,両者の違いがいまいちわかりません.検索してみたところ,powershellはプログラミングとかもできる新しい機能で,コマンドプロンプトは古くからあって下位互換性があるというようなことはわかったのですが.結局両方重要なのでしょうか? 参考書などを検索してもコマンドプロンプトとpowershellで別々に出ているものがほとんどです. 私の中では,コマンドプロンプトが新しくなったのがpowershellで,コマンドなどはどちらでも同じように使えるのではないかと思っているのですが.勉強するならコマンドプロンプトを一通り勉強してからpowershellに行ったほうがいいでしょうか?

  • Windows PowerShell用のcuiエディタって何かあります

    Windows PowerShell用のcuiエディタって何かありますか? PowerShellにより、 WindowsもLinuxのようにシェルスクリプトが組めたり、 Enter-PSSessionコマンドにより、cui的なリモートログインができるようになっていると知りました。 この流れで考えたときに、cuiエディタはどうしても必要だと思います。 Linuxにはviなどのエディタがありますが、PowerShellにはそういったものは存在しないのでしょうか?

  • Ubuntu(Linux)のコマンド

    Ubuntu(Linux)を始めたばかりの初心者です。 【質問1】 sudoというコマンドは、どのディレクトリに居ても使う事が出来るのでしょうか? 【質問2】 端末からコマンドを入力するのには、どのディレクトリに居るべきなのでしょうか? 教えてください。 宜しくお願いします。

  • コマンドプロンプトにてPowerShell実行

    Windows10のアップデート後にWindowsが起動できなくなり、青い画面の 「システムの復元」を実行しようとすると「このドライブでシステムの保護を 有効にする必要があります」となります。 色々ネットで調べて、コマンドプロンプトよりPowerShellにて有効にできる とのことだったのですが、実行すると「'PowerShell'は内部コマンドまたは 外部コマンド、操作可能なプログラムまたはバッチファイルとして認識 されていません」となります。 コマンドプロンプトの画面の左上には「管理者」となっています。 しかし、コマンドプロンプト画面になったときに「このコマンドを処理する にはメモリリソースが足りません」となりました。 なぜPowerShellが実行できないのでしょうか? 実行する方法をご教授下さい。 よろしくお願い致します。

  • Linux風コマンドプロンプトを探しています

    Windows上でLinuxのコマンドを使えるようになるソフトウェアはいくつが存在しますが、複数あるのでどの方法が最も良いのか決めかねます。 「Windows Services for UNIX」をインストールする方法。「cygwin」に「GnuWin32」。他に「Windows PowerShell」などがありますが、みなさんはどの方法を使っていますか? お勧めのものを教えてください。よろしくお願いします。

専門家に質問してみよう