web-dev-qa-db-ja.com

ツリーにファイルのみを出力させる方法は?

treeには -dオプション "List directories only. " 。しかし、「ファイルのみを一覧表示する」オプションが見つからないようです。manページを調べましたが、ファイルのみを一覧表示するオプションが見つからないようです。

7
stiemannkj1

他のコメントで述べたように、非ディレクトリのみをリストすることは、treeコマンドの目的と正確に一致しません。

ただし、ファイルの一覧のみ現在のディレクトリは、私と同じで、カスタマイズされたtreeよりもlsを使用する場合は珍しいことではありません(そして多分好みのフラグと引数でlsからtreeに別名を付けます。

treegrepの組み合わせを利用すると、必要なものが得られます。

$ tree -F
.
├── file1.txt
├── file5.txt
├── parent_dir1/
│   ├── child_dir/
│   ├── file2.txt
│   └── file3.txt
└── parent_dir2/
    └── child_dir2/
        └── file4.txt

4 directories, 4 files
$ tree -FL 1 | grep -v /$
.
├── file1.txt
├── file5.txt

2 directories, 1 file

'F'フラグを指定すると、treeは '/'をディレクトリに追加し、 'v'フラグをgrepに追加すると、指定したパターンが反転され、 '/'で終わるすべての行に一致します。

ディレクトリが実際に表示されていないにもかかわらず、最後の要約でも適用できることに気づくでしょう。

1つ以上のレベルを下げると、ツリー構造が支配的になり、状況は少し奇妙になります。

$ tree -FL 3 | grep -v /$
.
├── file1.txt
├── file5.txt
│   ├── file2.txt
│   └── file3.txt
        └── file4.txt

4 directories, 4 files

編集する

また、壊れたツリー出力の種類が気になる場合(つまり、一部のファイルの前に「└─」文字ではなく「├─」文字があり、マルチレベルバージョンが後を追っているように見える場合... )、最初に出力をソートして、これを修正できます。

$ tree --dirsfirst -FL 1 | grep -v /$
.
├── file1.txt
└── file5.txt

2 directories, 1 file
$ tree --dirsfirst -FL 3 | grep -v /$
.
│   ├── file2.txt
│   └── file3.txt
│       └── file4.txt
├── file1.txt
└── file5.txt
4 directories, 5 files

これにより、実際にノードのないツリー構造も読みやすくなると思います。

7
Daniel Brady

次のコマンドを検討してください。

tree -ifF /usr/Java/default/jre/lib/images | grep -v '/$'

/usr/Java/default/jre/lib/images
/usr/Java/default/jre/lib/images/cursors/cursors.properties
/usr/Java/default/jre/lib/images/cursors/invalid32x32.gif
/usr/Java/default/jre/lib/images/cursors/motif_CopyDrop32x32.gif
/usr/Java/default/jre/lib/images/cursors/motif_CopyNoDrop32x32.gif
/usr/Java/default/jre/lib/images/cursors/motif_LinkDrop32x32.gif
/usr/Java/default/jre/lib/images/cursors/motif_LinkNoDrop32x32.gif
/usr/Java/default/jre/lib/images/cursors/motif_MoveDrop32x32.gif
/usr/Java/default/jre/lib/images/cursors/motif_MoveNoDrop32x32.gif
/usr/Java/default/jre/lib/images/icons/Sun-Java_HighContrastInverse.png
/usr/Java/default/jre/lib/images/icons/Sun-Java_HighContrast.png
/usr/Java/default/jre/lib/images/icons/Sun-Java_LowContrast.png
/usr/Java/default/jre/lib/images/icons/Sun-Java.png

2 directories, 12 files

-iおよび-f引数を使用すると、treeはインデントするのではなく、各行にフルパスを出力します。 -F引数を指定すると、/がディレクトリ名に追加され、逆grep(grep -v '/$')によってフィルターで除外されます。

他のコマンドを実行している間、アクティビティの出力ディレクトリ(およびそのサブディレクトリ)の内容をすぐに確認できるように、このバリアントをよく使用します...

watch exec "tree -ifFsD /var/local/myapp/data | grep -v '/$'"

4
Chris