ツリーのみの出力ファイルを作成するにはどうすればよいですか?

ツリーのみの出力ファイルを作成するにはどうすればよいですか?

tree一つある-dオプションは " List directories only."です。。ただし、「ファイルのみ一覧表示」オプションが見つからないようです。マニュアルページを見ましたが、ファイルリストのみをリストするオプションが見つからないようです。

答え1

他の人がコメントで述べたように、ディレクトリではなくリストをリストするだけでは、コマンドの目的に正確には合いませんtree

ただし、ファイルのみが一覧表示されます。現在のディレクトリにあなたが私のようにカスタマイズを使用することを好むならばtreelsおそらくあなたが好むフラグとパラメータのエイリアスをls使うかもしれませtreeん)、これはまれではありません。

treeとの組み合わせを使用すると、必要なものをgrep得ることができます。

$ 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

私はこれが実際にはノードレスツリー構造をより読みやすくすると思います。

答え2

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

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引数を使用すると、インデントの代わりにフルパスが各行に出力されます-ftreeこのパラメータはディレクトリ名にを-F追加します。これは反転されたgrep()によってフィルタリングされます。/grep -v '/$'

私は、他のコマンドの実行中に出力ディレクトリ(およびそのサブディレクトリ)の内容をすばやく観察するのに役立つように、これらのバリエーションを頻繁に使用します。

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

答え3

使用しないという回答に同意した場合は、tree使用をお勧めしますfind

find $DIR -type f

$DIR検索したいディレクトリはどこにありますか?

それではあなたはできます。木の形で美しく飾りましょうやる意思があれば。

これをすべて行う関数を作成できますtree_file。クレジットはJavaSherrifに移動します。この回答(以前にリンクされた)sedもの。私はUTF文字を含めるように調整しました。

tree_file() {
    DIR=${1:-"."}

    find $DIR -type f |  sed -e "s/[^-][^\/]*\//  │/g" -e "s/│\([^ ]\)/│── \1/" 
}

答え4

以前のスレッドですが、-F now(?) はファイル形式を表示するために別の文字を追加します。

-F は、ls -F に従って/' for directories, aソケットファイルの場合 ='、ゲート (Solaris) の場合 >'、FIFO の場合 "|" を追加します。*' for executable files, a

コマンドは次のとおりです。

watch exec "tree -ifFsD /var/local/myapp/data | grep '[[:alnum:]]$\|\*'"

関連情報