使用 bash 查找文件并以新名称复制?

使用 bash 查找文件并以新名称复制?

我收藏了大量音乐。每个专辑文件夹都有一个名为“album.jpg”的专辑封面文件。我曾经使用过的每个音乐点唱机、流媒体服务器等都能够解析专辑封面并显示该封面。我刚刚添加了 Sonos 系统,但它不会解析“album.jpg”,只会解析“folder.jpg”。

我想使用 bash 脚本在 Artist-->Album 的分层文件夹结构中查找“album.jpg”的每个实例,并在同一位置复制该文件并将其命名为“folder.jpg”。我无法将信息从 find 传递到 cp。我似乎无法正确使用语法。

谢谢您的帮助。

答案1

运行此命令:find Music -name album.jpg -print0 | while read -r -d $'\0' x; do cp "$x" "${x%/*}/folder.jpg"; done

细节:

  • -print0-r-d $'\0'一起确保包含空格的路径不会被破坏
  • ${x%/*}表示删除最后一个/以及其后的所有内容$x(例如,/foo/bar/album.jpg变为/foo/bar

答案2

如果集合存储在 Unix 风格的文件系统中,我想我会使用符号链接来表示这样的内容,例如

find path/to/musicfolder -name 'album.jpg' -execdir ln -s {} ./folder.jpg \;

相关内容