🐕

ディレクトリおよびファイルの比較用に ls で出力する

2022/07/24に公開

ディレクトリおよびファイルの比較用に ls で出力する

二つのディレクトリがあって、permission 等含めて比較したい場合、でもファイルやディレクトリの更新時間は無視したい。(中身のデータの比較は別途行う)

結論

find -print0   | xargs -0 ls -dl --time-style=+""

ポイント1 (更新時間は表示したくない)

--time-style=+"" を指定することでタイムスタンプを非表示にできる。

参考:

https://unix.stackexchange.com/questions/344088/ls-command-without-hiding-date-and-time

ポイント2 (ディレクトリの中身はトップディレクトリからのパスで表示したい)

ls コマンドで、-d オプションを指定することでディレクトリの中身は表示しない。ディレクトリ自身の情報を表示する

       -d, --directory
              list directories themselves, not their contents

-d オプションはディレクトリ以外に対して指定しても OK

ポイント3 (ファイル名、ディレクトリ名に空白が含まれても OK にしたい)

ファイル名、ディレクトリ名に空白が含まれていた場合、xargs がファイル名の区切りを誤認するので、意図した結果にならない。

find のオプションで -print0 が利用できる。これを使うと、結果を出力するときの区切り文字として改行文字の代わりに、Null 文字を使う。

これに加えて、xargs-0 オプションを使うことでNull 文字を区切り文字として解釈して動作する。

https://linuxjm.osdn.jp/html/GNU_findutils/man1/xargs.1.html

-0, --null
入力される項目が、 ホワイトスペース (空白や改行) ではなく、 ヌル文字によって区切られます。
また、 クォートやバックスラッシュは、 特別な扱いをしません (つまり、 すべての文字が
そのままに解釈されます)。 ファイル終端文字列は無効になり、 他の引数と同じように扱われます。
このオプションは、 入力される項目にホワイトスペース、 クォート、 バックスラッシュなどが
含まれる可能性がある場合に、 役に立ちます。 GNU find の -print0 オプションは、
このモードに適した入力を生成します。

参考

Discussion