현재 디렉터리에서 파일을 찾고 파일이 디렉터리에 있으면 true로 평가하고 파일이 없으면 false로 평가하는 다음 스크립트가 있습니다.
#!/bin/bash
printf "\n Please enter a file name "
read num3
if [ -f $num3 ]
then
printf "It is valid script "
else
printf "Invalid file name "
fi
스크립트가 작성된 현재 디렉터리가 아닌 다른 디렉터리에 파일이 있는지 어떻게 확인할 수 있나요?
답변1
이 시도
#!/bin/bash
printf "\n Please enter a file name "
read num3
printf "\n Please enter the path to check "
read path2check
if find $path2check -name $num3 -print -quit |
grep -q '^'; then
echo "the file exists!"
else
echo "the file does not exist!"
fi
답변2
[ -f $num3 ]
뭔가에 Split+glob 연산자를 적용하면 의미가 없습니다 $num3
.
[ -f "$num3" ]
이 유형의 파일을 확인하기 위해 경로 $num3
(로 시작하는 경우 절대 경로 /
, 그렇지 않은 경우 현재 작업 디렉토리에 상대적인 경로)를 확인합니다.정기적인또는 일반 파일에 대한 심볼릭 링크입니다.
$num3
주어진 디렉토리와 관련된 일반 파일인지 확인하려면 다음을 사용하십시오.
dir=/some/dir
[ -f "$dir/$sum3" ]
$sum3
a 로 시작하지 않거나 /
포함하지 않는지 미리 확인하는 것이 좋습니다 /
.
이 방법 은 $dir
다음과 같은 경우에는 /
작동하지 않습니다 .//foo/bar
경로를 특별하게 처리하는 시스템. 따라서 dir=/
이 경우를 특별히 처리 해야 할 수도 있습니다 .
case $dir in
/) file=$dir$num3
*) file=$dir/$num3
esac
[ -f "$file" ]
이것이 $num3
상대 경로인지 확인하십시오(정기적인파일) 현재 디렉토리에 루트가 있는 디렉토리 트리에서 다음을 사용하는 것이 더 좋습니다 zsh
.
files=(**/$num3(DN-.))
if (($#files > 0)); then
echo "Success: $#files such file(s) found"
else
echo Failure
fi
답변3
이 예를 고려해 보세요. 내 complex_firmware.bin 이미지 어딘가에 파일이 있으면 추가하고 싶습니다.
1단계: 셸에서 VSPA_IMAGE1=/path/where/image/is/ located/file.bin을 내보냅니다. 2단계: 스크립트를 통해 파일이 발견되면 추가하고 위치 0x200000의 complex_firmware.bin에 추가합니다.
if [ -f "$VSPA_IMAGE1" ]; then
printf "\nAdding $VSPA_IMAGE1 to composite image\n"
dd if=$VSPA_IMAGE1 of=composite_firmware.bin seek=2048 bs=1024
else
printf "\nWarning!!!! export VSPA_IMAGE1 location/path"
fi
답변4
find 명령을 사용하여 루트 디렉토리를 검색하고 특정 이름의 파일이 존재하는지 확인할 수 있습니다. 루트 디렉터리에서 지정된 모든 디렉터리와 하위 디렉터리를 검색합니다.
!/빈/배시
printf "\n파일 이름을 입력해주세요"
숫자 3을 읽어보세요
if [ find / -type f -name $num3 2>/dev/null| wc -l
-gt 0]; then echo "유효한 스크립트입니다." else echo "잘못된 파일 이름" fi