85766


ディレクトリaとbについて、「ディレクトリ内のファイルの名前がすべて等しいか」をLinuxのコマンドで判定するには、どう書けばよいでしょうか。

以下のような場合はtrue、

[code]

    .
    ├── a
    │   ├── file1
    │   ├── file2
    │   └── file3
    └── b
        ├── file1
        ├── file2
        └── file3
    
[/code]

以下のような場合はfalseを表示してほしいです。

[code]

    .
    ├── a
    │   ├── file1
    │   └── file2
    └── b
        ├── file1
        ├── file2
        └── file3
    
[/code]

よろしくお願いします。


CC BY-SA 4.0
2022-01-17T14:18:50.093
85763
2022-01-21T12:12:48.563
50949
question
linux bash
「ディレクトリ内のファイル名がすべて等しい」の判定をLinuxで行う


`diff`コマンドの`-q`オプションを使うことで、ファイルの中身を見ずにファイル名の差分のみ比較できます。  
ちなみにサンプルコードの`-r`オプションはサブディレクトリを再帰的に確認するオプションです。

[code]

    MYVAR=`diff -qr a b`
    [[ -z "$MYVAR" ]] && echo "合ってます" || echo "違います" 
    
[/code]

参考資料:  
[diff to output only the file namesの回答](https://stackoverflow.com/a/6217722)  
[How To Bash Shell Find Out If a Variable Is Empty Or
Not](https://www.cyberciti.biz/faq/unix-linux-bash-script-check-if-variable-
is-empty/)


CC BY-SA 4.0
2022-01-18T00:56:58.343
85766
2022-01-18T00:56:58.343
9820
85763
answer


`dir1` は以下のようになっています。

[code]

    $ tree dir1
    dir1
    ├── a
    │   └── 1.txt
    ├── b
    │   └── 2.txt
    └── c
        ├── 3.txt
        ├── 4.txt
        └── d
            └── 5.txt
    
    4 directories, 5 files
    
[/code]

`dir２` は以下のようになっています。

[code]

    $ tree dir2
    dir2
    ├── a
    │   └── 1.txt
    ├── b
    └── c
        ├── 3.txt
        ├── 5.txt
        └── d
            └── 5.txt
    
    4 directories, 4 files
    
[/code]

すべての差異を以下のコマンドで確認できます。

[code]

    $ diff <(cd dir1; find . -type f | sort) <(cd dir2; find . -type f| sort)
    2d1
    < ./b/2.txt
    4c3
    < ./c/4.txt
    ---
    > ./c/5.txt
    
[/code]

もし差異があるかどうかだけが知りたい場合は `cmp` を使うこともできます。

[code]

    $ cmp -s <(cd dir1; find . -type f | sort) <(cd dir2; find . -type f| sort) && echo "差異なし" || echo "差異あり"
    差異あり
    
[/code]


CC BY-SA 4.0
2022-01-21T11:39:30.503
85844
2022-01-21T12:12:48.563
2022-01-21T12:12:48.563
34583
34583
85763
answer