
注文する:
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1
私に与えるもの:
41G /Users/user/Big folder
スクリプトで再利用するためにパスを抽出するにはどうすればよいですか?
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 | awk '{ print $2 }'
出力されます
/Users/user/Big
これは使用できません。次のような結果を探しています。
/Users/user/Big\ folder
答え1
自動化するときは、異なる単位の数字を使用して生活を複雑にしないでください。-h
に渡さないでくださいdu
。その後、出力に単純な数値ソートを使用でき、ディレクトリの1つに1 TB以上のデータがある場合、スクリプトは機能し続けます。
du -s ~/* | sort -k 1n | tail -n1
最大のサブディレクトリに1GB未満が含まれていても、常に1行を印刷します。これが望ましくない場合は、「出力が空」の条件を「しきい値より小さい数値」に置き換えることができます。
ディレクトリ名を抽出するには、出力を取得し、最初のタブまでその部分を削除します。
largest_directory=$(du -s ~/* | sort -k 1n | tail -n1)
largest_directory_size_kB=${largest_directory%%$(printf '\t')*} # if you need the size
largest_directory=${largest_directory#*$(printf '\t')}
答え2
フロント:
du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'\1',;q"
それ以外の場合、-h
結果du
には単純なサイズの数値が含まれているため、追加の作業なしで簡単に並べ替えることができますgrep
。
最初の行で削除を使用して終了するsed
と、head
通話が保存されます。
答え3
必要なパスを抽出する別の方法は、read
これらdu
のタスクを実行した後にコマンドを渡しsort-ed
、while/read
du.. sort.. | while read x d; do echo "$d"; done