![쉘 스크립트를 사용하여 특정 접두어로 시작하는 파일이 디렉토리에 존재하는지 테스트하는 방법 [닫기]](https://linux55.com/image/91243/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8A%B9%EC%A0%95%20%EC%A0%91%EB%91%90%EC%96%B4%EB%A1%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%20%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94%EC%A7%80%20%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
"ant"로 시작하는 파일이 디렉토리에 존재하는지 테스트해야 합니다. 파일이 있으면 삭제해야 합니다. 지금 제가 사용하고 있는 명령어는
test -e $FILE_PATH/$FILE_NAME
나는 정의했다
FILE_NAME="ant"
FILE_NAME 뒤에 *를 추가하면 작동하지 않습니다.
답변1
그러한 파일이 하나만 존재하는 경우 이를 삭제할 수 있는 이식 가능한 방법이 있습니다.
set -- "${FILE_PATH}/${FILE_NAME}"*
[ $# -eq 1 -a -e "$1" ] && rm -- "$1"
내가 보기에는 "ant" 파일이 얼마나 많이 존재하는지 상관하지 않지만 작업이 끝나면 해당 파일(모두)이 사라지도록 하려면 다음을 수행하십시오.
rm -f "${FILE_PATH}/${FILE_NAME}"*
- 이 방법으로 해당 파일이 없으면 rm은 (강제적으로 조용하게) 아무 작업도 수행하지 않지만 해당 파일이 (1개 이상!) 있으면 rm
삭제됩니다.
답변2
이를 수행하는 또 다른 방법은 다음과 같습니다.
-sh-4.1$ dir=$(pwd) ; filename="ant"
if (( $(shopt -s nullglob; set -- ${dir}/${filename}*; echo $#) > 0 )); then rm
${dir}/${filename}* ; fi
shopt -s nullglob
: 디렉터리가 비어 있으면 주석이 반환되도록 합니다.
set -- ${dir}/${filename}* :
위치 매개변수를 설정합니다.
$#
: 위치 매개변수의 개수를 반환합니다. rm 실행 조건
선형으로서:
1$ dir=$(pwd) ; filename="ant" ; if (( $(shopt -s nullglob; set -- ${dir}/${filename}*; echo $#) > 0 )); then rm ${dir}/${filename}* ; fi