我想找到不包含名为 OSZICAR 的文件的目录,然后 cd 进入该目录并执行更多操作...
我现在所拥有的是:
find `pwd` -mindepth 2 -maxdepth 2 -type d -exec sh -c "echo {}; cd {}; ls; if [! -f $0/OSZICAR];echo "doing my thing";fi" \;
但有错误,有人可以帮忙吗?谢谢
我最初的命令(没有“没有 OSZICAR”的标准)是:
find `pwd` -mindepth 2 -maxdepth 2 -type d -exec sh -c "echo {}; cd {}; ls; cp ../../submit_script_Stampede.sh .; ls;sed -i s/Monkhorst/Gamma/ KPOINTS; cp CONTCAR POSCAR ;sbatch submit_script_Stampede.sh" \;
答案1
for dir in $(find ${PWD} -mindepth 2 -maxdepth 2 -type d)
do
cd ${dir}
ls OSZICAR > /dev/null 2>&1; r=${?}
if [ ${r} -ne 0 ]
then
# do your thing here
fi
done
答案2
确保 和[
以]
空格分隔,并删除命令参数周围的 "echo
或将这些 " 替换为 \"。另请注意,{} 必须是单独的参数。
所以更正后的命令是:
find `pwd` -mindepth 2 -maxdepth 2 -type d -exec sh -c 'echo $1; cd $1; ls; if [ ! -f OSZICAR ];then echo "doing my thing";fi' dummy {} \;