2014-04-04 2 views
0

특정 확장자가있는 파일이 있고 비어 있지 않은지 확인해야합니다. 문제는 파일 이름, 확장명 및 경로를 알 수 없다는 것입니다.Bash 스크립트 - 파일이 존재하는지 확인하십시오.

FILE="/Users/test/*.out" 

작동하지 마십시오

+0

해당 패턴과 일치하는 파일이 여러 개인 경우 어떻게해야합니까? 'FILE = $ (ls/Users/test/*. out)'시도 – RedX

+0

이 폴더의 초기 조건은 하나의 파일이 될 것이라는 점입니다. .out – user3472065

답변

-2

사용하여 알려진 이름

FILE="/Users/test/my.out" 
if [[ -f $FILE && -s $FILE ]] ; then echo "EXIST"; fi 

여기

내 솔루션 단지 하나가있는 경우, 만 작동

FILE=$(ls "Downloads/*.zip" 2>/dev/null) 

시도 파일.

+0

감사합니다! 이 검사를 while 루프에 넣으면 파일이 아직 존재하지 않으면 "ls : /Users/test/*.out : No such file or directory"라는 출력이 표시됩니다. 이 출력을 피할 수있는 방법이 있습니까? – user3472065

+1

편집을 참조하십시오. 2>/dev/null은 오류를 표시하지 않습니다. 그건 그렇고, 이것은 매우 나쁜 hackjob 같아요 ... – Mathias

+0

그래,하지 마 ... –

4

나는 당신이 경우에 여러 개의 파일이 있습니다, 배열을 사용하는 것이 좋습니다 :

arr=(/Users/test/*.out) 

if ((${#arr[@]} > 0)) && [[ -s "${arr[0]}" ]] 
then 
    ... 
fi 
1

을 할 수 있습니다 루프 사용 배열 이상을 사용하거나 사용 @의 개정 향풀의 솔루션 :

dir=/users/test 
for file in "${dir}"/*.out; do 
    break 
done 

if [ -f "${file}" ] && [ -s "${file}" ]; then 
    echo "found a regular, non-empty .out file: ${file}" 
fi 
-1

나는이 생각을 해야 할 일 :

if [ -f ${var} ]; then 
    if [ -s ${var} ]; then 
     echo "Found $var" 
    fi 
fi 
+0

나는 당신이 질문을 제대로 읽지 않았다고 생각합니다. –