需要将文件复制到现有目录并删除已存在的同名但扩展名不同的文件

需要将文件复制到现有目录并删除已存在的同名但扩展名不同的文件

编辑:为了清楚起见,完全重写问题。

我有一个目录树(新的)以及一堆扩展名为 .new.我有一棵相同的树(老的)其中许多文件的名称与新的树,除了扩展名是.old.我想复制所有.new文件新的目录树进入老的包含.old文件的目录树。当一个带有扩展名的文件.new被写入老的目录树,我想删除任何具有相同名称但.old扩展名的文件。

所以,如果在新的目录树中,有一个名为 的文件new/foo/bar/file.new,它将被复制到老的目录树为old/foo/bar/file.new,然后old/foo/bar/file.old如果文件退出,该文件将被删除。

编辑#1

这个答案在下面进行了讨论(使用具有令人困惑的无关背景信息的旧问题)。请参阅我在下面制定的实际解决方案作为答案之一。

答案1

基本方法是从包含 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

答案2

这是在 terdons 答案的评论中讨论出来的最终答案。

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

相关内容