両方のディレクトリの拡張を比較し、不足している拡張を新しいディレクトリに移動します。

両方のディレクトリの拡張を比較し、不足している拡張を新しいディレクトリに移動します。

より明確に説明するために、フレーズを編集して変更しました。 dirAとdirBの両方に.dm4ファイルがあります。私の参照フォルダはdirAで、dirBのdirAのすべての欠落している.dm4ファイルを一覧表示し、ディレクトリAの既存の.dm4で見つからないすべての.dm4ファイルをディレクトリCに公開しようとしています。私のdirAとdirBにあるかもしれない.dm4をお見逃しなく。

ベストアンサー1

いくつかの仮定をしましょう:

  • あなたの殻はbash
  • あなたのカタログAはいdirA
  • あなたのカタログBはいdirB
  • あなたのディレクトリCまだ存在しませんが、名前が付けられる予定です。dirC
  • 関心のあるファイルはすべてこのディレクトリにあるか、このディレクトリに重複している可能性がありますdirAdirB

私が考えることができる最も簡単な方法は次のとおりです。

rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)

これにより、すべての.dm4ファイルが保存され、両方のディレクトリリストがdirC作成されます。diff

これ以上の情報が必要な場合質問を編集してください詳細な詳細。

修正する:

次のファイルがあるとします。

$ ls -1 dir{A,B}/*
dirA/apple.dm4
dirA/banana.dm4
dirA/date.dm4
dirA/fig.dm4
dirB/apple.dm4
dirB/elderberry.dm4
dirB/fig.dm4
dirB/grape.dm4
dirB/huckleberry.dm4

一部のファイルは重複し、一部はのみ、dirA一部はのみですdirBcherry.dm4価値があるのは、両方のディレクトリにファイルがないことです。

また、foo.shスクリプトがあるとします。

$ cat << EOF > foo.sh; chmod 755 foo.sh
#!/usr/bin/env bash
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
EOF

実行すると、foo.sh次のものが生成されます。

$ ./foo.sh
2,3c2
< banana.dm4
< date.dm4
---
> elderberry.dm4
4a4,5
> grape.dm4
> huckleberry.dm4
$ ls -1 dirC/*
dirC/apple.dm4
dirC/banana.dm4
dirC/date.dm4
dirC/elderberry.dm4
dirC/fig.dm4
dirC/grape.dm4
dirC/huckleberry.dm4

出力は、欠落している.dm4ファイルが、であることをdiff示しています。すべてのファイルが見つかりました。dirAelderberrygrapehuckleberrydirA または dirBに存在しますdirC

おすすめ記事