Command-Line

需要將文件複製到現有目錄並刪除已存在的同名但副檔名不同的文件

  • August 27, 2017

**編輯:**為了清楚起見,完全重寫了問題。

我有一個目錄樹(),其中包含一堆副檔名為 .new. 我有一個相同的樹(),其中許多文件的名稱與樹中的名稱相同,只是副檔名為.old. 我想將目錄樹中的所有.new文件複製到包含文件的目錄樹中。由於帶有副檔名的文件被寫入目錄樹,我想刪除任何具有相同名稱但副檔名的文件。.old``.new``.old

因此,如果在目錄樹中有一個名為 的文件new/foo/bar/file.new,則將其複製到目錄樹中old/foo/bar/file.new,然後old/foo/bar/file.old如果該文件退出,則該文件將被刪除。

編輯#1

這個答案在下面被散列(使用具有令人困惑的無關背景資訊的舊問題)。請參閱我在下面製定的實際解決方案作為答案之一。

這是在 terdons 答案的評論中得出的最終答案。

cd new
for i in */*/*.new; do cp "$i" "path/to/old/${i}" && rm "path/to/old/${i//new/old}"; done

基本方法是從包含 mp3 文件的目錄執行它:

for i in *.mp3; do cp "$i" /path/to/flac/ && rm path/to/flac/"${i%.*}".flac; done

這將遍歷所有名稱以 結尾的文件,將.mp3每個文件複製到/path/to/flac/應該是包含 flac 文件的目錄,如果復製成功,則刪除相應的.flac文件。訣竅是使用 shell 的字元串操作功能,${i%.*}將刪除副檔名,因此rm ${i%.*}.flac將刪除與目前 mp3 文件同名但.flac副檔名的文件。

為了顯示:

$ foo='abc.def'
$ echo ${foo%.*}
abc

引用自:https://unix.stackexchange.com/questions/97823