我不是专业的脚本编写或找到命令的任何时候(只是一个警告)。我正在尝试创建一个脚本,它可以将我所有的mp3播客移动到一个文件夹中,然后我可以移动到我的手机上。
所以我做的剧本需要移动所有的mp3's (甚至那些有奇怪的路径)。我创建了一个脚本,如下所示,它看起来是*按我的意愿执行,但是它总是给出如下错误:
find /home/jason/gPodder/ -name '*.mp3' -exec bash " cp '{}' /home/jason/gPodder/mp3/ " \;
Which returns:
bash: cp '/home/jason/gPodder/Downloads/The Documentary/TheDocumentary20170823-GoingGreenInTheOilState.mp3' /home/jason/gPodder/mp3/ : No such file or directory 但是,如果我复制上述bash‘命令’,这是没有问题的。请你帮我理解一下脚本中的错误是什么。
谢谢
发布于 2017-08-29 20:53:57
其他人指出了引用和执行的问题。
我建议您不要使用find -exec,而是查找一个文件列表,然后将该列表输送到xargs和cp。使用print0选项可以帮助您绕过文件名和目录名中的任何“有趣”字符。
例如:
find sourcepath -name \*.mp3 -print0 \
| xargs -0 cp -t destinationpath这样做的好处是xargs将从find收集多个文件名,并同时将它们传递给cp,因此每个cp实例可以复制20或100个文件,而不是为每个文件启动1 cp调用。xargs将为您在cp命令行中提供足够的文件名。
您还可以向xargs添加-P n选项,它将并行启动多个cp进程。
基于您的文件与目标mp3文件夹位于同一个文件系统的基础上。您可以将-l添加到cp中,这样就可以将文件硬链接到目的地,而不是复制它们。
例如:
find sourcepath -name \*.mp3 -print0 \
| xargs -0 -P 5 \
cp -l -t destinationpathhttps://unix.stackexchange.com/questions/389056
复制相似问题