2014-03-25 2 views

답변

2

경로명 확장이 [[ ... ]] 안에 일어나지 않기 때문에 for loop을 사용하여 파일이 존재하는지 확인하는 것이 가장 좋습니다. 그래서 file는 문자 *이 아닌 파일 이름의 목록이 포함

#!/bin/bash 

for file in /home/yaal/temp/hatch/*; do 
    if [[ -f $file ]]; then 
     echo $file 
    else 
     echo "No files found" 
    fi 
done 
+2

'bash'는 정규식을 사용할 수 있지만 다른 상황에서 사용할 수 있습니다. – chepner

+0

감사합니다. @chepner. 혼동을 피하기 위해 답을 수정했습니다. –

3

경로 이름의 확장이 아닌 배열 변수 할당의 오른쪽에 발생하지 않습니다 같은 것을 사용합니다. 경로 이름 확장은 [[ ... ]] 내에서 수행되지 않으므로 *이라는 파일이/home/yaal/temp/hatch`에 있는지 묻는 중입니다. 당신은 단지 하나 개 이상의 파일이있는 경우 hatch에 (.로 시작하는 파일 제외) 알고 싶다면이 비어 있거나없는 경우

,

for f in /home/yaal/temp/hatch/*; do 
    if [[ -f $f ]]; then 
     echo "$file" 
    else 
     echo "No files found" 
    fi 
    break 
done 

당신은 또한 다음, 배열을 채울 확인할 수 있습니다 시도 :

files=(/home/yaal/temp/hatch/*) 
if ((${#files[@]} > 0)); then 
    echo "${files[0]}" # First file found 
else 
    echo "No files found" 
fi 

당신이 .로 시작하는 파일 이름을 고려 중 하나 shopt -s dotglob를 사용하거나 두 가지 패턴 /home/yaal/temp/hatch/* /home/yaal/temp/hatch/.*를 사용하려는 경우

.

+0

실제로 어떻게되는지 설명하는 +1. –

관련 문제