編輯和更改措辭以使其更加清晰 - 我在 dirA 和 dirB 都有 .dm4 檔案。我的參考資料夾是dirA,我想列出dirA 中缺少的所有.dm4 文件,這些文件位於dirB 中,然後將所有缺少的.dm4s 以及目錄A 的現有.dm4s 一起發佈到目錄C 中,從而確保我不會錯過任何可能存在於我的 dirA 和 dirB 中的 .dm4s。
答案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
輸出diff
告訴您缺少的 .dm4 檔案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 選項可能會很有趣。