Wil*_*ett 2 command-line scripting find file-copy
编辑:为了清楚起见,完全重写了问题。
我有一个目录树(新的),里面有一堆扩展名为 .new
. 我有一个相同的树(旧),其中许多文件的名称与新树中的文件名称相同,只是扩展名为.old
. 我想将所有.new
文件从新目录树复制到包含文件的旧目录树中.old
。由于将带有.new
扩展名的文件写入旧目录树,我想删除任何具有相同名称但带有.old
扩展名的文件。
所以,如果在新的目录树中,有一个名为 的文件new/foo/bar/file.new
,它会被复制到旧的目录树中old/foo/bar/file.new
,old/foo/bar/file.old
如果它退出,则该文件将被删除。
编辑#1
这个答案在下面进行了讨论(使用具有令人困惑的无关背景信息的旧问题)。请参阅我在下面制定的实际解决方案作为答案之一。
基本方法是从包含 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)