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

Wil*_*ett 2 command-line scripting find file-copy

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

我有一个目录树(新的),里面有一堆扩展名为 .new. 我有一个相同的树(),其中许多文件的名称与树中的文件名称相同,只是扩展名为.old. 我想将所有.new文件从新目录树复制到包含文件的目录树中.old。由于将带有.new扩展名的文件写入目录树,我想删除任何具有相同名称但带有.old扩展名的文件。

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

编辑#1

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

ter*_*don 6

基本方法是从包含 mp3 文件的目录中运行它:

for i in *.mp3; do cp "$i" /path/to/flac/ && rm path/to/flac/"${i%.*}".flac; done
Run Code Online (Sandbox Code Playgroud)

这将遍历名称以 结尾的所有文件,将每个文件都.mp3复制到/path/to/flac/包含 flac 文件的目录中,如果复制成功,则删除相应的.flac文件。诀窍是使用 shell 的字符串操作功能,${i%.*}将删除扩展名,因此rm ${i%.*}.flac将删除与当前 mp3 文件同名但.flac扩展名的文件。

为了显示:

$ foo='abc.def'
$ echo ${foo%.*}
abc
Run Code Online (Sandbox Code Playgroud)