Command-Line
需要將文件複製到現有目錄並刪除已存在的同名但副檔名不同的文件
**編輯:**為了清楚起見,完全重寫了問題。
我有一個目錄樹(新),其中包含一堆副檔名為
.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