我正在尝试运行这个命令
for c in ax
do
mkdir $TgtDir$c/$Date
cd $TgtDir$c/$DirNew
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo $DIR
echo find . -iname $tgt -exec cp --parents {} ../$Date \;
find . -iname $tgt -exec cp --parents {} ../$Date \;
done
它打印
/home/ax/new
find . -iname '*20170829*' -exec cp --parents {} ../20170829 ;
但不复制任何东西。如果我从新目录运行此处回显的命令(在末尾添加 \ 之后,似乎 echo 正在吞下它作为转义),它工作正常 - 并且文件被复制到 /home/ax/20170829/ ....
我在这里缺少什么想法吗?
答案1
我猜你并不真正在目录 DIR 中;您cd
在子 shell 中执行,但其余命令的工作目录仍位于$TgtDir$c/$DirNew
.您可以通过调用pwd
after来验证这一点echo $DIR
。
解决方案:直接调用cd
,不要使用子shell或将结果分配给变量。将绝对目标路径添加到复制命令中。
for c in ax
do
mkdir $TgtDir$c/$Date
DIR=$( dirname "${BASH_SOURCE[0]}" )
cd "${DIR}"
pwd
find . -iname $tgt -exec cp --parents {} $TgtDir$c/$Date \;
done
替代方案:使用源目录而不是“.”在查找命令中。
for c in ax
do
mkdir $TgtDir$c/$Date
cd $TgtDir$c/$DirNew
DIR=$( dirname "${BASH_SOURCE[0]}" )
find "${DIR}" -iname $tgt -exec cp --parents {} ../$Date \;
done
注意:代码未经测试。