본문 바로가기

How many language skills do you have?/Shell

[Shell] 특정 파일들이 있는지 없는지 확인하기 / Check if specific multiple files exist

계산 서밋하기 전에 인풋 파일이 잘 준비되었는지 확인하기 위한 스크립트를 짰다.

file1, file2, file3, file4, file5가 모여야 계산이 돌아가기때문에 파일을 특정해주어야했고, 존재하지 않을때 요란한 에러출력이 일어나지 않길 바랬으며, 어떤 파일이 없는지도 알고싶었다. 


all_exist () {
    local filename
    for filename; do
    ls $filename > /dev/null 2>&1  && continue
    echo -e "$filename dose NOT exist"
    error=$(echo "error")
    done
    return 0
}

all_exist POSCAR INCAR KPOINTS POTCAR run_slurm.sh

[[ -z $error ]] && echo "All files exist"

 

해당 스크립트를 실행하면 다음과 같다. 

$ ls
INCAR  KPOINTS  POSCAR  POT  run_slurm.sh

$ if_inputfiles_exist.sh
POTCAR dose NOT exist

모든 파일이 잘 있을 때는 아래와 같은 결과가 나온다. 

$ ls
INCAR  KPOINTS  POSCAR  POTCAR  run_slurm.sh

$ if_inputfiles_exist.sh
All files exist

파일 유무를 확인하는 방법이야 무궁무진한데.. 나는 이렇게 쓰고 있다. 

✅ Shell script를 기초없이 그냥 필요에의해서 배우는중이라 python의 try and exception을 bash로 구현을 어떻게해야할지 모르겠어서 고민이 있었는데 &&continue로 구별짓는 선에서 멈추었다. 

✅ 그리고 에러가 하나도 없을 경우도 알고싶어서 error 변수를 만들어서 에러가 있는지없는지만 판별하여 확인을 하였다. 

✅ 이 스크립트를 짜면서 에러 문구를 띄지 않게하는 것을 알게됐다. > /dev/null 2>&1