Tree Command:最終プロジェクトで型の依存関係を回避できますか?

Tree Command:最終プロジェクトで型の依存関係を回避できますか?

私は、ローカルディレクトリを同じディレクトリのUSBバックアップバージョンと比較して、注目すべき/削除できる違いを識別していますtreediff

$ cd home/dir/
$ tree --charset=ascii -af . > ~/tree__local

$ cd {usb}/home/dir/
$ tree --charset=ascii -af . > ~/tree__usb

$ diff ~/tree__local ~/tree__usb > ~/diff-analysis.txt

しかし、ツリーには最後の項目の上位四半期を去る習慣があることがわかりました。まあ、言葉で説明するのは難しいです。

$ tree --charset=ascii -af .
.
|-- ./bar
|   |-- ./bar/babushka
|   |-- ./bar/galeda
|   `-- ./bar/helga
`-- ./foo
    |-- ./foo/alpha
    |-- ./foo/beta
    `-- ./foo/gamma

8 directories, 0 files

# add a new final item.
$ touch zebra

# same command.
$ tree --charset=ascii -af .
.
|-- ./bar
|   |-- ./bar/babushka
|   |-- ./bar/galeda
|   `-- ./bar/helga
|-- ./foo
|   |-- ./foo/alpha
|   |-- ./foo/beta
|   `-- ./foo/gamma
`-- ./zebra

8 directories, 1 file

foo /のファイルがどのように追加のパイプラインブランチを取得するかを確認してください。このdiffコマンドは、ファイル自体が実際にまったく変わらない場合でも、これを違いとして表示します。

これは非常に私の目的には適していません。これを迂回または防止する方法を知っていますか?均一な分岐管を押したままにできますか?マニュアルtreeには、「最後」または「最終」項目の書式設定に関する言及はありません。

答え1

出力はtree表示用なので、解析にはあまり役に立ちません。

両方のディレクトリ階層を直接比較する方が良いです。たとえば、次のようにできますrsync

rsync --dry-run --archive --delete --itemize-changes home/dir/ "$usb_path"/home/dir/

(含む--dry-runまたはこのオプションの短いバリエーション-nは、非常に重要.)

このコマンドは、ローカルディレクトリとUSBデバイスのディレクトリの違いを正確に伝えます。このオプションを使用して実行すると、ディスクに変更は発生しません--dry-run。この--itemize-changesオプションは、rsyncコピーまたは削除する各ファイルまたはディレクトリの簡単なステータス文字列を出力し、同期理由をエンコードします。

--omit-dir-timesタイムスタンプが他のディレクトリを一覧表示しないように、オプションリストの最後に追加されました。--ignore-existingサイズやメタデータが異なる場合でも、両方の場所に存在するファイルを無視するように追加されました。上記のコマンドにこれら2つの追加オプションを追加すると、次のプレフィックスが付いた出力行が表示されます。

  • *deleting、ローカルディレクトリでは削除されたがUSBデバイスでは削除されないコンテンツの場合、
  • cd+++++++++、ローカルディレクトリに追加されたディレクトリの場合、または
  • >f+++++++++、ローカルディレクトリに追加されたファイルの場合。

答え2

より良い使用のために、インデントと四半期形式全体を削除できると思いますdiff

-iはツリーが
インデント行を印刷しないようにし、-fオプションと一緒に使用すると便利です。 -J または -x オプションと組み合わせて使用​​すると、できるだけ多くのスペースを削除します。

$ tree --charset=ascii -afi .
.
./bar
./bar/babushka
./bar/galeda
./bar/helga
./foo
./foo/alpha
./foo/beta
./foo/gamma
./zebra

8 directories, 1 file

残念ながら、インデントを使用すると、視覚的に迅速に理解できます。しかし、ああ…

答え3

各行の最初の行の前の内容をすべて.空白に変換します。

tree --charset=ascii -af . | awk 'BEGIN{FS=OFS="."} {gsub(/./, " ", $1)} 1'

関連情報