ファイルまたはディレクトリのリストを指定された最小および最大深度レベルに制限できるUnixユーティリティはありますか?
ファイルが変更された固有のディレクトリのリストを表示するgitコマンドがありますが、git diff --name-only HEAD~3 HEAD~0 | sed 's|/[^/]*$||' | uniq
出力を特定の深さに制限したいと思います。これを達成する方法はありますか?
以下はインストール例ですDrupal
。モジュールをインストールまたは更新した後、gitコマンドはどのモジュールが追加または変更されたかを示します。モジュールディレクトリは4番目のレベルディレクトリであるため、より深いディレクトリは切り捨てられ、4番目のレベルディレクトリから重複エントリを削除する必要があります。
sites/all/modules/table_trash
sites/all/modules/table_trash/css
sites/all/modules/table_trash/drush
sites/all/modules/table_trash/js
sites/all/modules/table_trash/libraries
sites/all/modules/table_trash/libraries/variants/js
sites/all/modules/table_trash
sites/all/modules/video_filter
sites/all/modules/views_aggregator
sites/all/modules/views_aggregator/views
sites/all/modules/views_aggregator
sites/all/modules/views_aggregator/views_aggregator_more_functions
sites/all/modules/views_php
sites/all/modules/views_php/plugins/views
sites/all/modules/views_php
sites/all/modules/views_watchdog
sites/all/modules/views_watchdog/views/handlers
sites/all/modules/views_watchdog/views/plugins
sites/all/modules/views_watchdog/views/theme
sites/all/modules/views_watchdog/views
sites/all/modules/views_watchdog
これは、N番目の区切り文字(この場合は「/」)以降のすべての行を削除するgrepコマンドを適用する一般的なケースのようです。しかし、出力から重複する項目も削除できることを探しています。これがまさにその理由です。この場合、uniq
コマンドを介して渡す必要があります。この場合、最大レベルと最小レベルの数は両方とも4でなければなりません。
ベストアンサー1
を使用してこれを行うことができ、プロセスからの必要性を排除できますawk
。適切に設定sed
uniq
limit
git diff --name-only HEAD~3 HEAD~0 |
awk -vlimit=3 -F'/' -vOFS='/' -- '--NF == limit && !x[$0]++'