比較兩個目錄中的某個副檔名,然後將缺少的副檔名移到新目錄

比較兩個目錄中的某個副檔名,然後將缺少的副檔名移到新目錄

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

答案1

讓我們做一些假設:

  • 你的外殼是bash
  • 你的目錄AdirA
  • 你的目錄BdirB
  • 你的目錄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 檔案dirAelderberrygrapehuckleberry。找到的所有文件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僅檢查檔名,要檢查版本,-update 選項可能會很有趣。

相關內容