%EC%9D%B4%20%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
Bash 3.2.52(2)가 설치된 CentOS에서는 이전에 존재하지 않았는지 확인한 후 두 백업 디렉터리를 모두 생성해 보았습니다.
rm -rf "${general_backups_dir}"
rm -rf "${specific_backups_dir}"
mkdir -p "${general_backups_dir}"
mkdir -p "${specific_backups_dir}"
작업을 테스트하려면 ls -la
디버그 모드에서 작업할 수 있지만 두 디렉터리의 존재를 나타내는 더 정확한 방법을 원합니다.
이것은 작동하지 않습니다:
ls -la ${HOME} | grep "${general_backups_dir}"
ls -la ${HOME} | grep "${specific_backups_dir}"
그런데 저는 (의사 코드)와 같은 한 줄 연산을 선호합니다.
ls -la ${HOME} | grep *EXPRESSION_INCLUDED_IN_BOTH_DIRECTORY_NAMES*
답변1
-d
다음에서 테스트 연산자를 사용하여 디렉토리가 존재하는지 확인하십시오 bash
.
if [[ -d testdir ]]; then echo "testdir already exists"; else mkdir testdir; fi
"testdir"을 변수로 바꿀 수 있습니다. 안전을 위해 변수를 큰따옴표로 묶으십시오.
if [[ -d "$backup_dir"]]; then echo "$backup_dir already exists"; else mkdir "$backup_dir"; fi
중첩된 디렉터리(예: dir1/dir2/dir3)인 경우 대신 를 사용하세요 mkdir -p
.
파일 테스트 연산자에 대한 자세한 내용은 다음을 참조하세요 bash
.https://tldp.org/LDP/abs/html/fto.html
답변2
POSIX 셸에 파일이 있는지 확인하는 구문은 다음과 같습니다.
if [ -e "$file" ] || [ -L "$file" ]; then
printf '%s\n' "The $file file exists"
if [ -d "$file" ]; then
if [ -L "$file" ]; then
echo "and it's a symlink to a directory"
else
echo "and it's a directory"
fi
else
echo "and it's not a directory (or I couldn't tell if it was)"
fi
else
printf '%s\n' "$file does not appear to exist"
fi
따라서 중요한 상황에서 실행하려는 코드를 여기에 삽입할 수 있습니다.
-f
이제 주목해주세요 왜냐하면
rm -rf -- "$file" || exit
$file
사전에 존재하지 않는 곳에서는 성공할 것입니다. 실패한 종료 상태가 반환되는 유일한 경우 rm
는 파일이 여전히 존재하는 경우입니다(해당 파일은 있지만 삭제할 수 없음).
$file
따라서 존재하지만 유형이 아닌 경우를 다루려는 경우가 아니면 사전에 확인할 필요가 없을 것입니다.목차.
그리고:
mkdir -p -- "$file" || exit
존재 하는 한 성공할 $file
것이며 이미 존재하더라도 디렉토리로 판별될 수 있습니다.
다시 말하지만, 사전에 테스트할 필요는 없을 것입니다.