我正在脚本中的命令下方运行
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
不确定为什么移动命令以正则表达式失败
答案 0 :(得分:4)
您的脚本过于复杂,有几个问题,其中一个是问题,我想这是ls | grep ...
部分,但是要找出答案,您应该包括一些调试日志记录。
for i in $(cat ...)
遍历单词而不是行。 ls
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"