encontre um diretório que não contenha um arquivo com o nome OSZICAR e então entre nesse diretório e faça algo mais

0

Eu gostaria de encontrar diretórios que não contenham um arquivo com o nome OSZICAR e, em seguida, cd no diretório e fazer algo mais ...

tudo que eu tenho agora é:

find 'pwd' -mindepth 2 -maxdepth 2 -type d -exec sh -c "echo {}; cd {}; ls; if [! -f $0/OSZICAR];echo "doing my thing";fi" \;

mas há erro, alguém poderia ajudar? Obrigado

Meu comando original sem os Critérios de não ter 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" \; 
    
por user40780 08.03.2016 / 20:13

2 respostas

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
    
por 08.03.2016 / 20:23
1

Verifique se [ e ] estão separados por espaço e remova o "em torno do argumento para o comando echo ou substitua os" por \ ". Observe também que {} deve ser um argumento separado. / p>

Assim, um comando corrigido seria:

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 {} \;
    
por 08.03.2016 / 20:27

Tags