より明確にするために言葉を編集し変更します - dirA と dirB の両方に .dm4 ファイルがあります。参照フォルダーは dirA で、dirA にはないが dirB にはあるすべての .dm4 ファイルをリストし、不足しているすべての .dm4 と dir A の既存の .dm4 をディレクトリ C に投稿して、dirA と dirB に存在する可能性のある .dm4 を見逃さないようにしたいと考えています。
答え1
いくつかの仮定を立ててみましょう:
- あなたの殻は
bash
- あなたのディレクトリAは
dirA
- あなたのディレクトリBは
dirB
- あなたのディレクトリCまだ存在しないが、名前が付けられる予定
dirC
- 関心のあるファイルはすべてこれらのディレクトリに存在する
dirA
か、または重複している可能性がありますdirB
私が考えられる最も簡単な方法は次のとおりです。
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
これにより、すべての .dm4 ファイルが2 つのディレクトリに保存され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
、一部は にのみ存在することに注意してくださいdirB
。どちらのディレクトリにもcherry.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
ことがわかります。dirA
elderberry
grape
huckleberry
dirA
または dirB
は に存在しますdirC
。
答え2
dirA のすべてのファイルを dirC にコピーします
cp dirA/*.dm4 dirC
次に、dirCの既存のファイルをスキップして、dirBからすべてのファイルをコピーします。
cp -n dirB/*.dm4 dirC/
マニュアルページcp
:
-n, --no-clobber do not overwrite an existing file (overrides a previous -i option)
注:-n
ファイル名のみをチェックします。バージョンをチェックするには、-u
pdate オプションが役立つ場合があります。