Macos Bash/Shell脚本查找所有文件,包括关键字和特定文件类型的文件

Macos Bash/Shell脚本查找所有文件,包括关键字和特定文件类型的文件,macos,bash,shell,unix,find,Macos,Bash,Shell,Unix,Find,如何使用find查找特定类型的所有文件,例如“*.mp3”,但具体来说,查找包含关键字的任何名称的所有文件。e、 g.“黑色” 所有这些文件都适用于: - blackDog.mp3 - black dog.mp3 - black rain.mp3 - blackness.mp3 - BlAcK.mp3 - black.dog.mp3 - black-dog.mp3 这是我的代码,可以找到所有的'*.mp3'文件,但我就是找不到方法来编写所

如何使用find查找特定类型的所有文件,例如
“*.mp3”
,但具体来说,查找包含关键字的任何名称的所有文件。e、 g.
“黑色”

所有这些文件都适用于:

    - blackDog.mp3
    - black dog.mp3
    - black rain.mp3
    - blackness.mp3
    - BlAcK.mp3
    - black.dog.mp3
    - black-dog.mp3
这是我的代码,可以找到所有的
'*.mp3'
文件,但我就是找不到方法来编写所有包含关键字
'black'
的mp3

find ~/Desktop \( -type f -iname '*.mp3' \) -print0 |
while IFS= read -r -d '' f;
do mv -- "$f" ~/Music ;
done
非常感谢您能为我提供的任何帮助,请在下面对任何澄清进行评论:

这应该可以做到:

find ~/Desktop -type f -iname '*black*.mp3' -exec mv -- {} ~/Music \;

文件名模式
*black*.mp3
与任何包含
black
并以
.mp3

-iname'*black*.mp3'
结尾的文件名匹配,但不适合您?@Barmar现在我知道了,谢谢您将所有这些文件共享到同一目录中?如果是这样的话,最好的方法就是使用
mv*black*.mp3~/Music
建议使用
-exec
而不是shell中的循环。也许使用
exec+
比使用
exec\更好
为了减少调用
mv
@TomFenech的次数,文档中说
+
在末尾附加了所有文件名。但是使用
mv
时,您需要在末尾使用目标目录。GNU
mv
--target directory
,可以在文件名之前使用它来解决这个问题,但我认为最好保持它的通用性。除非要移动数百个文件,否则差异可能可以忽略不计。