![使用 bash 查找文件并以新名称复制?](https://linux22.com/image/1146116/%E4%BD%BF%E7%94%A8%20bash%20%E6%9F%A5%E6%89%BE%E6%96%87%E4%BB%B6%E5%B9%B6%E4%BB%A5%E6%96%B0%E5%90%8D%E7%A7%B0%E5%A4%8D%E5%88%B6%EF%BC%9F.png)
我收藏了大量音乐。每个专辑文件夹都有一个名为“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 \;