找到一个不包含名为 OSZICAR 的文件的目录,然后 cd 进入该目录并执行更多操作

找到一个不包含名为 OSZICAR 的文件的目录,然后 cd 进入该目录并执行更多操作

我想找到不包含名为 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 {} \;

相关内容