
Unixでは、1つのコマンドを使用してサブディレクトリを含むディレクトリのみを一覧表示できますか?
たとえば、「division_A」というサブディレクトリが含まれている場合は、ディレクトリ名を一覧表示したいと思います。
/data/data_file/form_100/division_A
/data/data_file/form_101/division_A
/data/data_file/form_102/division_A
予想される結果は次のとおりです。
form_100
form_101
form_102
2つのコマンドラインでのみ目標を達成できます。
cd /data/data_files
echo `ls -d */division_A 2> /dev/null | sed 's,/division_A,,g'`
だから誰かがコマンドを使ってこれを行うことができるかどうか尋ねたかったのです。
答え1
可能であれば、そのオプションを使用して、他のツールを呼び出さずに結果の親ディレクトリのみを印刷するように出力形式を指定GNU find
できます。たとえば、次のようになります。-printf
dirname
$ find
.
./data_file
./data_file/form_100
./data_file/form_100/division_A
./data_file/form_101
./data_file/form_101/division_A
./data_file/form_102
./data_file/form_102/division_A
$ find -type d -name 'division_A' -printf "%h\n"
./data_file/form_100
./data_file/form_101
./data_file/form_102
答え2
そしてzsh
:
print -rl -- **/division_A(:h:t)
答え3
ファイルシステムを解析する場合は、ls
通常使用するのは良い考えではありません。find
この種の作業のために。
ディレクトリリストが空ではありません。
空でないディレクトリのリストが必要な場合は、次のコマンドを使用できます。
サンプル:
$ tree
.
|-- empty1
|-- empty2
|-- empty3
|-- full1
| |-- division_A
| |-- empty1
| `-- full1
| `-- afile
|-- full2
| |-- division_A
| |-- empty2
| `-- full2
| `-- afile
`-- full3
|-- division_A
|-- empty3
`-- full3
`-- afile
その後、次のコマンドを使用できます。
$ find . -mindepth 1 -not -empty -type d
./full3
./full3/full3
./full2
./full2/full2
./full1
./full1/full1
これはすべてのディレクトリのリストですいいえ空です。必要に応じて、awk
この出力を使用して整理できます。uniq
上記のコマンドのPOSIX互換バージョンは次のとおりです。
$ find . -type d -exec sh -c '[ -n "$(ls -UA "$1/" )" ]' dummy {} \; \
-print |grep -v '^.$'
ディレクトリのリスト。ディレクトリを含みます。部門_A
ただし、「division_A」を含むディレクトリのリストを探している場合は、次のfindコマンドを使用して検索できます。
$ find . -type d -name "division_A" -exec dirname {} \;|sort -u
./full1
./full2
./full3
必要に応じてここから出力をクリーンアップできますsed
。
$ find . -type d -name "division_A" -exec dirname {} \;| sed 's/\.\///' |sort -u
full1
full2
full3
答え4
そのディレクトリに CD をコピーする代わりに、次のコマンドを使用します。
echo `ls -d /data/data_files/*/division_A 2> /dev/null | sed 's,/division_A,,g'`