2013-02-26 32 views
0

对不起,我不能非常具体,我真的不知道什么是问题,只是从bash开始,所以我的调试技巧仅限于回显。unrar命令只有在手动执行时才有效

我有下面的代码:

#! /bin/bash 
# post_torrent.sh 
{ 
    # Log file, file where we tell what events have been processed. 
    LOG_FILE=/Users/Server/Documents/sickbeard/logs/post_torrent.log 
    # Username for transmission remote. 
    TR_USERNAME="admin" 
    # Password for transmission remote. 
    TR_PASSWORD="1234" 
    # Get current time. 
    NOW=$(date +%Y-%m-%d\ %H:%M:%S) 
    # Source directory, should not be changed. 
    SRC_DIR="${TR_TORRENT_DIR}/${TR_TORRENT_NAME}/" 
    # Directory to store the un-compressed files in.. 
    DEST_DIR="${TR_TORRENT_DIR}/${TR_TORRENT_NAME}/" 

    cd $SRC_DIR 
    echo $NOW "SRC_DIR $SRC_DIR" >> $LOG_FILE 
    RAR=$(find . -iname "*.rar") 
    echo $NOW "RAR $RAR" >> $LOG_FILE 
    unrar x -inul "$RAR" 

    exit 0 
} & 

日志文件显示正在使用正确的文件。当我在终端(我正在一个mac osx服务器上工作)中逐一执行脚本中的语句时,一切正常并且文件被解压缩。然而,当这个脚本在下载洪流后执行时,它不会。

我一直在试图找出为什么这是大约三个小时,仍然没有发现任何线索。我认为这些权限是可以的,因为我为此进行了测试。然而,我是bash的新手,不太熟悉mac osx命令行。

在此先感谢。编辑: 一些额外的信息。 日志看起来是这样的: 2013年2月27日0点14分42秒SRC_DIR /卷/多媒体/ aa_bb /下载/ some_serie/ 2013年2月27日0点14分42秒RAR ./some_serie.rar

当文件完成下载时,程序通过传输作为程序集执行。

必须提取的文件位于共享的外部硬盘驱动器上。

希望这会有所帮助。

+0

你不需要按顺序unrar他们,以串行方式 - 意味着1,然后2,然后3等等。?如果是这样的话,问题在于你试图以并行方式解压它们......可能是蠕虫。简单的解决方案是避免RAR归档种子。我多年来一直在对他们进行讨伐:-) – prodigitalson 2013-02-26 22:03:55

+0

制作新脚本并逐行添加内容,并将其输出到终端进行测试。也许你的特定文件存在一些问题(在设置等...)。所以用你需要使用的函数创建新的脚本并执行尝试执行它。 – Stepo 2013-02-26 22:04:01

+0

RAR包含多个文件名似乎很有可能,但是当你将它传递给unrar时,像这样:'unrar x -inul“$ RAR”',unrar将把它们全部看作一个参数。您可以尝试从变量周围删除引号。 (如果文件名可能包含空格,会变得更复杂。) – William 2013-02-26 22:05:00

回答

1

更改的行:

unrar x -inul "$RAR" 

到:

for i in $RAR 
do 
    unrar -x inul $i 
done 

这样做的原因是,$ RAR包含了所有的结果,并要分析每个结果分别

[编辑]
我注意到你没有在你的例子中显示上述变化 -

RAR=$(find . -iname "*.rar") 

到:你想要做的没有他们

变化将无法正常工作这一行什么

RAR=`find . -iname "*.rar"` 

这些都是由双向报价,他们重音符
set -x的输出添加到您的问题

+0

更改了代码。不用找了。增加了一些额外的信息希望它可以帮助。 – Boelensman1 2013-02-26 23:20:16

相关问题