2017-09-12 4 views
0

最近10日間に修正された最大のディレクトリ10個を見つけ出し、サイズ別にbashを使って並べ替える必要があります。最近の10日間に修正された最大のディレクトリ10個を見つけてBashを使って並べ替える方法

サイズは人間が判読できる形式で取得する必要があります。

使用して素敵な形式でディレクトリのサイズを取得するのは簡単だろうデュ:

sudo du -h /mypath/ --max-depth=1 

しかし、デュ、私理由がある

ビットの最後の10日間に変更を追加するオプションがありませんまた、使用しようとしている:

sudo find /mypath/e -xdev -depth -type d -ls -mtime 10 

しかし、この場合私はサイズを取得できません。

私はここにStackOverflowで他のいくつかの質問をミックスして一致させるためにしようとしてきたと私は私がxargsのを使用することができることを発見しましたが、まだ出力が正しく表示されません

sudo find /mypath/ -mtime -10 -type d | xargs ls -la 

私はまだしようとしています多くのオプションがありますが、私はそれのための良い、信頼性の高い、エレガントなソリューションを見つけることができません。

助けてもらえますか?

+1

"変更された"と "大きい":(1)ディレクトリに小さなファイルが1つ追加されてから削除され、古いものは残された)ファイルがありません。このディレクトリを "変更済み"としてカウントしますか? (2)どのようにディレクトリのサイズを測定するのですか?すべてのサブディレクトリ内のすべてのファイル?指定されたディレクトリの最上位にあるファイルだけ? 10日以内のファイルだけ? (仕事を楽にする/ mypathの下に構造があるのだろうかと思っています) – sjnarv

+0

あなたのご意見ありがとうございます! 1はyes、countsは変更されたもの、2つの出力はディレクトリとそのサイズに名前を付けるだけです(権限やその他のものも取得できればOKです)。ファイルは必要なく、ディレクトリは必要ありません。 – Pitto

答えて

1

ないエレガントな、しかし、1つの方法を使用することができます。名前のスペースは空白でファイル名は大丈夫ですが、タブや改行は扱いません。

#!/bin/bash 

if [[ ! -d "$1" ]]; then 
    echo "Usage: $(basename $0) <directory>" >&2 
    exit 1 
fi 

find "$1" -mindepth 1 -xdev \ 
    -type d -mtime -10 |   # subdirs of $1 modified in last 10 days 
    xargs -r -n 1 -d $'\n' du -s | # total storage in each such subdir 
    sort -t $'\t' -k 1nr,1 |  # sorted in descending order 
    head -10 |      # first 10 are "top 10" 
    awk -F $'\t' '{print $2}' | # emit just the subdirs 
    xargs -r -n 1 -d $'\n' du -sh # total, human-readable, for those 10 
+0

私の要求に完全にマッチしています! 本当にありがとうございました。 – Pitto

2

あなたは、最近変更されたディレクトリを分離し、そのストレージを計算し、結果をソートし、要約を表示する

sudo find /mypath/ -mtime -10 -type d | xargs ls -ldrt 
+0

あなたの貢献に感謝します。それは正常に動作するようですが、私は人間が読めるサイズを取得しません... – Pitto

+0

適切な要因でサイズを分割するために 'bc'または' $(()) 'を使用できます –

+0

あなたは例を共有できますか? – Pitto

関連する問題