为什么我的管道不起作用?

Lur*_*Dog 2 command-line bash scripts

我正在尝试制作一个 bash 脚本,它将在我的下载文件夹中找到所有 mp3 并将它们移动到音乐文件夹中。为什么这条线不行?

find ./ -type f -name \*.mp3 | mv *.mp3 /home/mitch/Desktop/Music/$ARTIST
Run Code Online (Sandbox Code Playgroud)

我尝试使用管道将第一个命令中的信息转换为第二个命令,但我以前从未使用过管道,不知道是我做错了还是我对它们的用途有错误的想法为了。

enz*_*tib 5

mv命令不使用其标准输入,因此您必须将标准输入转换为参数,为此可以使用xargs

find ./ -type f -name '*.mp3' | xargs mv -t /home/mitch/Desktop/Music/$ARTIST
Run Code Online (Sandbox Code Playgroud)

此外,您可以直接使用以下-exec操作find

find ./ -type f -name '*.mp3' -exec mv {} /home/mitch/Desktop/Music/$ARTIST ';'
Run Code Online (Sandbox Code Playgroud)

编辑

正如@geirha 所指出的,如果您的文件名包含空格,则第一个命令将不起作用。在这种情况下,它应该如下

find ./ -type f -name '*.mp3' -print0 | xargs -0 mv -t /home/mitch/Desktop/Music/$ARTIST
Run Code Online (Sandbox Code Playgroud)