提问人:InvisibleInk 提问时间:10/6/2023 最后编辑:SomethingDarkInvisibleInk 更新时间:10/6/2023 访问量:56
Linux 单行批量查找一个名称的所有文件并复制和重命名它们
Linux one-liner to batch find all files of a name and duplicate and rename them
问:
在我的音乐、艺术家、专辑和 mp3 文件的文件夹树中,每个专辑都有一个名为 cover.jpg 的文件。
我想找到所有这些封面.jpg文件,并使用新名称文件夹.jpg复制它们。因此,树中的每个相册目录现在都有一个名为 cover.jpg 的文件和它的副本 name folder:.jpg。
在我的猴子周围,我尝试:
find . -iname "*cover.jpg*" -exec cp cover.jpg folder.jpg '{}' \;
但是我收到了如下所示的“不是目录”消息:
cp: target './Alternative/Aimee Mann/1995 - I''''d With Stupid (MP3)/cover.jpg': 不是目录
答:
0赞
John3136
10/6/2023
#1
你发现这将是“/Alternative/Aimee Mann/1995 - I'm With Stupid (MP3)/cover.jpg”(即封面.jpg在末尾)。此外,您不在文件夹中,因此您的 cp 不会找到正确的文件。-iname "*cover.jpg*"
{}
会像工作一样吗?就像进入每个目录并将 cover.jpg 复制到文件夹一样.jpg - 最坏的情况是 cover.jpg 不存在,并且 cp 在这些目录中失败。find . -type d -exec cd "{}"; cp cover.jpg folder.jpg \;
[编辑] find 不允许你加入这样的 shell 命令,而是类似的东西:应该这样做。find . -type d -exec bash -c 'cd $0; cp cover.jpg folder.jpg' {} \;
评论
0赞
InvisibleInk
10/6/2023
我从我的音乐文件夹的根目录试了一下,得到: find: missing argument to '-exec' cp: target ';': 没有这样的文件或目录
0赞
John3136
10/6/2023
是的 - 刚刚检查过。“exec”不允许你像这样链接命令。你可以把CD放......;CP 到脚本中并通过 exec 运行它 - 但这不是一个好的 oneliner。同样,您可以在找到的所有目录上做一个 shell for 循环,但这也不是一个很好的衬里。
评论