シンボリックリンクを使用してフォルダのディスク使用量を見つける

シンボリックリンクを使用してフォルダのディスク使用量を見つける

私はDebianサーバーで作業しており、sudoなしでコンソールにのみアクセスできます。 「Applications」というデフォルトのフォルダには、私が持っているすべてのプロジェクトを含むサブフォルダが含まれています。

ただし、管理パネルを使用して新しいプロジェクトを作成すると、フォルダ名は意味のない文字列なので、新しいフォルダへのシンボリックリンクを作成して名前を変更できます。

たとえば、アプリケーションフォルダは次のようになります。

applications/
    abuwryjbrb
    evharjqgxj
    MyCustomProjectName1
    MyCustomProjectName2

各アプリケーションがどのくらいのスペースを使用しているかを確認したいと思います。私はUnixの経験があまりないので、それをグーグルしてdu -sh *

ただし、出力は次のようになります。

91M     abuwryjbrb
201M    evharjqgxj
0       MyCustomProjectName1
0       MyCustomProjectName2

そうすると、名前を一つ一つ確認し、どのフォルダがどのフォルダかを確認する必要がありますが、時間がかかりすぎます。

シンボリックリンクのディスク使用量を出力する方法はありますか?

代わりにdu -sh -L *、元のフォルダとシンボリックリンクの重複フォルダを取得できず、次のように混在した出力を取得します。

91M     abuwryjbrb
201M    MyCustomProjectName1

これらのフォルダの一部には元の名前があり、一部にはシンボリックリンク名があります。

答え1

-Lフラグとduコマンドを使用してシンボリックリンクを使用できます。du -sh -L *あなたを助ける必要があります。

答え2

du -sh -l -- */

末尾のスラッシュは、ディレクトリとディレクトリへのシンボリックリンクのワイルドカード一致を有効にします。ディレクトリへのシンボリックリンクの場合、このコマンドはターゲットで機能します。

-l(GNU拡張子など-hdu特定のファイル/ディレクトリのディスク使用量が一度だけ計算される無効な動作。各プロジェクト内にハードリンクが存在する場合、報告されたディスク使用量にも影響します。

プロジェクトは、各ディレクトリに対して1回、シンボリックリンクに対して1回、2回リストされます。自分の名前にのみ一致するワイルドカードパターンを作成する簡単な方法がある場合は、この問題を回避できます。たとえば、名前を常に大文字で書き、自動名が常に小文字の場合は、次のようにします。

du -sh [[:upper:]]*/

または、次のものを使用できます。

du -shHl -- *

これには通常のファイルもリストされます。このオプション-H-DGNUでは標準オプションduとも呼ばれます)は、コマンドラインに渡されたシンボリックリンクを逆参照するように指示-Hします。du各ディレクトリツリー内のシンボリックリンクは通過しません(-Lここでは良いアイデアではありません)。

zshでは利用可能です

du -shH -- *(@-/)

ディレクトリへのシンボリックリンクでのみ機能するか、du -shH -- *(@)ターゲットに関係なくシンボリックリンクでのみ機能します。今回は、-l同じディレクトリへの複数のシンボリックリンクがない場合は省略できます。

すべてのシェルで(そしてGNUを使用find)、次のものを使用できます。

find . -maxdepth 1 -type l -xtype d -exec du -shH {} +

ディレクトリへのシンボリックリンクでのみ機能します。

関連情報