!/빈/배시

!/빈/배시

현재 디렉터리에서 파일을 찾고 파일이 디렉터리에 있으면 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" ]

$sum3a 로 시작하지 않거나 /포함하지 않는지 미리 확인하는 것이 좋습니다 /.

이 방법 은 $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

관련 정보