以下是较大代码的一部分,我试图弄清楚如何在 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
从 移出$@
。然后循环像以前一样继续进行。