【问题标题】:PPSS shell scriptPPSS 外壳脚本
【发布时间】:2016-07-18 17:21:57
【问题描述】:

我制作了一个简单的 shell 脚本来使用 SoX 处理 mp3 文件。

for f in ./*.mp3; do sox "$f" "${f%%.mp3}S.mp3" silence 1 0.02 1% -1 0.02 1%; done

语法应该是这样的:

sox in.wav out.wav silence 1 0.1 1% -1 0.1 1%

它将从文件夹中的文件中删除静音,并创建一个末尾带有“X”的新文件(以区别于原始文件)。我将脚本保存在我的 /bin 文件夹中,它工作正常。

但是,现在我想将它与 PPSS 一起使用,以便并行运行 8 个实例。我似乎无法让它工作,但在日志文件中,我不断收到的错误是日志中的这个错误:

/usr/local/bin/ppss:第 2283 行:soxy.sh/Users/marw/Downloads/testfolder//ppss_dir/job_log/_Users_marw_Downloads_testfolder__10_audio_mp3:没有这样的文件或目录

状态:失败 总处理时间(hh:mm:ss):00:00:01

PPSS 语法应该是这样的:

|P|P|S|S| Distributed Parallel Processing Shell Script 2.97

usage: /usr/local/bin/ppss [[ -d <sourcedir> | -f <sourcefile> ]]  [[ -c '<command> "$ITEM"' ]] 
                 [[ -C <configfile> ]] [[ -j ]] [[ -l <logfile> ]] [[ -p <# jobs> ]] 
                 [[ -q ]] [[ -D <delay> ]] [[ -h ]] [[ --help ]] [[ -r ]] [[ --daemon ]] 

Examples:
                 /usr/local/bin/ppss -d /dir/with/some/files -c 'gzip '
                 /usr/local/bin/ppss -d /dir/with/some/files -c 'cp "$ITEM" /tmp' -p 2
                 /usr/local/bin/ppss -f <file> -c 'wget -q -P /destination/directory "$ITEM"' -p 10

我是 shell 脚本的新手,如果这是一个愚蠢的问题,请原谅我。我的操作系统是 MacOS 10.11.5。

这就是我正在尝试使用 PPSS:

ppss -d /Users/marw/Downloads/testfolder -c 'soxy.sh'

也许我必须以不同的方式编写我的原始脚本?不过,没有 PPSS 也能正常工作。

编辑:

我这里有一个调试日志:http://pastebin.com/wak47rf8

【问题讨论】:

  • 我在重读您的帖子后删除了我的答案。似乎ppss 正在将您的脚本“soxy.sh”传递到您提供的目录路径中,尽管我不熟悉“ppss”及其工作原理。在再次发布之前,我会考虑一下。
  • 好酷 :) 谢谢。顺便说一句,它不一定是 PPSS,但这是我在 Stackoverflow 上搜索的结果。我只想并行运行脚本,所以我可以使用 8 个内核而不是 1 个。
  • 我找到了答案,我不得不在“soxy.sh”之后留下一个尾随空格,就像这个“soxy.sh”。我只是这样尝试过,它可以工作。
  • 很高兴听到它:)。
  • 您可以发布自己问题的答案,以防其他人像您一样偶然发现这个问题

标签: linux macos parallel-processing sox


【解决方案1】:

-c 参数的末尾必须有一个尾随空格。这有效:

ppss -d /Users/marw/Downloads/testfolder -c 'soxy.sh '

而这不起作用:

ppss -d /Users/marw/Downloads/testfolder -c 'soxy.sh'

我是从 Github 上的 PPSS wiki 获得的:

-c 选项指定 PPSS 在 对 -d 指定的目录中的每个文件进行并行处理。在这个 例如,该命令有一个尾随空格,这是必要的,因为 执行时命令将扩展为“gzip example.tar”。如果空间 省略,会报错。

【讨论】:

  • 如果您不需要这个奇怪而脆弱的脚本的 ssh 功能,请考虑使用 GNU parallel 或 OSX/GNU xargs
  • 我正在尝试并行但遇到了一些麻烦,但是 xargs 似乎不是一个并行化工具,我尝试阅读手册页但无法弄清楚。 PPSS 对我来说似乎也很脆弱,但它是我唯一需要工作的。我只需要并行化 SoX,这样我就可以为每个内核处理一个文件。我对 CLI 工具很陌生,所以我可能会遗漏一些非常基本的东西。
  • OSX 和 GNU xargs-P 进行并行化。
猜你喜欢
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多