コマンド出力からスペースを含むUnix互換ファイルパスの抽出

コマンド出力からスペースを含むUnix互換ファイルパスの抽出

注文する:

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')}

おすすめ記事