bash移动失败了
我在脚本中运行以下命令bash移动失败了,bash,shell,Bash,Shell,我在脚本中运行以下命令 move_jobs() { cd $JOB_DIR for i in `cat $JOBS_FILE` do if [ `ls | grep -i ^${i}- | wc -l` -gt 0 ]; then cd $i if [ ! -d jobs ]; then mkdir jobs && cd .. && mv "
move_jobs() {
cd $JOB_DIR
for i in `cat $JOBS_FILE`
do
if [ `ls | grep -i ^${i}- | wc -l` -gt 0 ]; then
cd $i
if [ ! -d jobs ]; then
mkdir jobs && cd .. && mv "${i}"-* "${i}"/jobs/
else
cd .. && mv "${i}"-* "${i}"/jobs/
fi
error_handler $?
fi
done
}
但它失败了
mv: cannot stat `folder-*': No such file or directory
不确定为什么正则表达式中的move命令会失败您的脚本过于复杂,并且有几个问题,其中之一就是问题所在,我想这是
ls | grep…
部分,但要找到答案,您应该包括一些调试日志
循环遍历单词,而不是行李>for i in$(cat…)
- 如果您仍然这样做,请不要grep文件名,而是将其包含在您的
调用中:ls
ls“${i}”-*|wc-l
- 当唯一不同的是您创建了一个文件夹时,您不需要检查它是否存在。您可以改用
mkdir-p
- 在脚本中的文件夹间跳转会使脚本几乎无法读取,因为在读取脚本时需要跟踪所有
命令cd
你可以简单地写下以下内容,我认为这会满足你的要求:
xargs -a "$JOBS_FILE" -I{} \
sh -c "
mkdir -p '$JOB_DIR/{}/jobs';
mv '$JOB_DIR/{}-'* '$JOB_DIR/{}/jobs';
"
或者,如果您需要更多的控制:
while IFS= read -r jid; do
if ls "$JOB_DIR/$jid-"* &>/dev/null; then
TARGET_DIR="$JOB_DIR/$jid/jobs"
mkdir -p "$TARGET_DIR"
mv "$JOB_DIR/$jid-"* "$TARGET_DIR"
echo "OK"
else
echo "No files to move."
fi
done < "$JOBS_FILE"
而IFS=read-r jid;做
如果ls“$JOB_DIR/$jid-”*&>/dev/null;然后
TARGET_DIR=“$JOB_DIR/$jid/jobs”
mkdir-p“$TARGET_DIR”
mv“$JOB\u DIR/$jid-”*“$TARGET\u DIR”
回音“OK”
其他的
echo“没有要移动的文件。”
fi
完成<“$JOBS\u文件”
这里的用例是什么?解释问题,不要告诉我们为什么你的代码不起作用!