unrar 在 for 语句中不起作用,如何提前退出 For 语句

unrar 在 for 语句中不起作用,如何提前退出 For 语句

以下是较大代码的一部分,我试图弄清楚如何在 for 语句中编写 unrar 语句:

DST_DIR="/Volumes/Mac_Storage/Test_Folder"
cd "/Volumes/Mac_Storage/Test_Data"

find "$filePath" -type f "${EXT_OPTS[@]}" -exec sh -c '
for pathName do
    unzip -o '*.zip' && unrar e -r '*.rar' "$DST_DIR" && rm *.r* 
    echo "$pathName"
    printf "%s\n" "$pathName"
    sleep 1
done' sh {} +

有问题的行:

unzip -o '*.zip' && unrar e -r '*.rar' "$DST_DIR" && rm *.r*

在外面工作得很好,但是一旦我将它添加到 for 语句中,就会出现文件名不匹配的错误。

干杯

答案1

DST_DIR脚本内的变量与sh -c调用 的 shell 中的同名变量不同find。你需要设置DST_DIR 里面脚本sh -c,或者在调用它时传入它。

find ... -exec sh -c '
    DST_DIR="/Volumes/Mac_Storage/Test_Folder"
    for pathName do
        # more code here
    done' sh {} +

在这里,变量在内部脚本中以文字字符串的形式获取其值。DST_DIR如果您不在其他地方使用该变量,则可以从旧位置删除该变量。

或者,

find ... -exec sh -c '
    DST_DIR=$1; shift
    for pathName do
        # more code here
    done' sh "$DST_DIR" {} +

这里,变量的值通过命令行从外部环境传递到内部脚本中。第一个参数$1保存输入脚本时的值。它被分配给内部DST_DIR变量,然后$1从 移出$@。然后循环像以前一样继续进行。

相关内容