より明確に説明するために、フレーズを編集して変更しました。 dirAとdirBの両方に.dm4ファイルがあります。私の参照フォルダはdirAで、dirBのdirAのすべての欠落している.dm4ファイルを一覧表示し、ディレクトリAの既存の.dm4で見つからないすべての.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ファイルが保存され、両方のディレクトリリストが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
その後、dirBのすべてのファイルをコピーし、dirCの既存のファイルをスキップします。
cp -n dirB/*.dm4 dirC/
マニュアルページcp
:
-n, --no-clobber do not overwrite an existing file (overrides a previous -i option)
注:-n
ファイル名のみが解決されます。バージョンを確認するには、-u
pdateオプションが面白いかもしれません。