シェルスクリプトでデータを文字列の長い行順にソートする方法
はじめに
データを文字列の長い行順(あるいは短い行順)に並び替えする方法について説明します。
もともとのきっかけは、find
コマンドで検出したディレクトリを階層の深い順に削除しないとエラーメッセージが表示される問題を解消したいということでした。
「階層が深いディレクトリ=パスの文字列が長いディレクトリ」をどうやってソートしようかなと考えて当エントリをまとめることにしました。
検証環境
準備
適当にディレクトリを作成して試してみます。
スペースを含んでも正しく動作するかを確認したかったので、ここではあえてスペースを含むディレクトリも作ってみました。
単純にfind
で出力してみる
まずは単純にfind
でディレクトリのみを出力してみます。
ディレクトリ構造を単純に探索していった結果に見えます。
find
の実行結果を文字列の長い順にソートしてみる
今度は文字列長でソートしてみます。
やり方としては単純です。
- 各行の文字列の先頭にスペース区切りで 文字列長 を付与
- 数値でソート
- 付与した 文字列長 を除去
ひとこと
これを組み合わせて、tmp_
というプレフィックスを持つディレクトリのみを削除する場合は以下のようになります。
ディスカッション
コメント一覧
まだ、コメントがありません