[완료] Shell을 이용해서,,directory내에 file이 존재하는 지 확인하려면 어떻게 해야 할까요?
지금 제가 하려고 생각했던 것은요.
특정 directory에 가서 *.gz file이 몇개나 있는지 확인을
하고.
없으면 없다,,있으면,,모든 gz file을 list 하려고 하거든요..
남이 해놓은 걸 보고 이리저리 컨닝 중인데요..
잘 이해도 안되고 해서,,여기 글을 올려봅니다.
현재 만들어 놓은건요..
gz_file_list=`ls *.gz 2> /dev/null`
(이렇게 해서 gz_file_list에 모든 gzip file을 저장(?)해 놓으려고 합니다.)
number=$?
if [ $number -gt 0 ] (값을 찍어보니까요, gz file이 없으면 2가 찍히고, 있으면 0이 찍히네요.)
(즉 0보다 크다면,,,gz file이 없는 경우겠죠..이게 맞게 이해하는 건지요?)
then
echo "NO FILES"
else
echo "$gz_file_list"
fi
위와 같이 하면 맞는 걸까요?
또 인터넷을 뒤져보다 보니까요.. 아래와 같은 방법을 쓰는 경우도 있던데요 ..
if [ -z "gz_file_list" ]
이건 "gz_file_list"가 비어 있는가 비어있지 않는가를 확인하는 건가요?
좀더 찾아보고는 있는데, 아직 뜻이 명확히 와 닿지를 않아서요..
만일 이게 제대로 이해한 것이라면,,
혹시 아래와 같이 할 수도 있는 것인지 해서요 ..
gz_file_list=`ls *.gz 2> /dev/null`
if [ -z "gz_file_list" ]
then
echo "NO FILES"
else
echo "$gz_file_list"
fi
조언을 좀 부탁드려도 될까요 ~
미리 감사드립니다...
gz_file_list=`ls *.gz 2>
위 코드에서 number에 들어가는 값은 ls 명령의 반환값(console 출력값이 아닌)이 들어갑니다.
따라서 *.gz 파일이 있으면 정상적이니까. 0,
*.gz 파일이 없으면 에러니까. 2가 들어가는 것 같습니다.
(자세한 것은 ls의 반환값을 확인해봐야겠죠.)
number에는 ls의 반환값이
gz_file_list에는 ls의 console 출력값이 들어갑니다.
감사합니다..
그럼 대충 제가 추측하고 있던게 맞는 거네요^^
이렇게 설명을 해 주시니,,훨씬 맘이 편하네요 ^^
혹시 -z 에 대해서 조금 알려주실 분이 계시면
너무 감사하겠습니당..^^
"-z"는 주어진
"-z"는 주어진 스트링의 길이가 0인지를 판단하는 겁니다.
대략 위와 같은 식입니다.
(테스트를 해보진 않았습니다.)
감사합니다..지금 시험을 해보았는데요..
말씀해 주신것처럼 잘 동작합니다.
위에 적어 주신 예에서는 "This is zero"만 찍히니까
설명해주신대로 동작하는 거네요 ^^
gz_file_list=`ls *.gz 2> /dev/null`
if [ -z "gz_file_list" ]
then
echo "NO FILES"
else
echo "$gz_file_list"
fi
그런데,,위와 같은 Code를 실행해 보았는데, 예상과 다르네요.
일단..현재의 directory에는 a.gz과 b.gz과 같이 두 개의 gz file이
있는데요..
그럼 "gz_file_list"의 길이가 0이 아니므로...gz_file_list에 가리키는
a.gz과 b.gz이 찍히거든요..
하지만,,,첫번째 line을 gz_file_list=`ls *.gaz 2> /dev/null`
와 같이 변경을 하면, 현재 directory에 .gaz를 확장자로 가지고 있는
file이 없기 때문에 "NO FILES"가 찍힐 걸로 예상을 했었는데요.
실제로는 "NO_FILES"가 찍히는 것이 아니고,,그냥 빈줄이 찍히네요
마치도 $gz_file_list가 공백문자열을 가지고 있고..
그래서 -z 에서도 0이 아닌걸로 보고..결국은 공백문자열을 찍는 것 같이
보이는데요..
이게 맞게 이해한 걸까요?
그렇다면,,위와 같은 경우에 "NO FILES"라고 찍도록 만들 수 있는 방법은
없을까요?
또 조언 부탁드리면서,,질문 드립니다..
감사합니다. ^^
실수 엿습니다..ㅜㅜ
if [ -z "gz_file_list" ]
라고 하면 안되고..
if [ -z "$gz_file_list" ] 라고 했어야 하는건데
한글자 빼먹은걸 이제야 봤네요..
암튼 해결은 된 셈이네요..
감사합니다. ^^
.
zero 에 약자아닐까요?
-x 옵션은 exist 의 약자였고..
보통 -f 가 force 의 약자이듯..
댓글 달기