[완료] Shell을 이용해서,,directory내에 file이 존재하는 지 확인하려면 어떻게 해야 할까요?

hyper9의 이미지

지금 제가 하려고 생각했던 것은요.
특정 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

조언을 좀 부탁드려도 될까요 ~
미리 감사드립니다...

ktd2004의 이미지

gz_file_list=`ls *.gz 2> /dev/null`
(이렇게 해서 gz_file_list에 모든 gzip file을 저장(?)해 놓으려고 합니다.)
number=$?

위 코드에서 number에 들어가는 값은 ls 명령의 반환값(console 출력값이 아닌)이 들어갑니다.
따라서 *.gz 파일이 있으면 정상적이니까. 0,
*.gz 파일이 없으면 에러니까. 2가 들어가는 것 같습니다.
(자세한 것은 ls의 반환값을 확인해봐야겠죠.)

number에는 ls의 반환값이
gz_file_list에는 ls의 console 출력값이 들어갑니다.

hyper9의 이미지


그럼 대충 제가 추측하고 있던게 맞는 거네요^^
이렇게 설명을 해 주시니,,훨씬 맘이 편하네요 ^^

혹시 -z 에 대해서 조금 알려주실 분이 계시면
너무 감사하겠습니당..^^

ktd2004의 이미지

"-z"는 주어진 스트링의 길이가 0인지를 판단하는 겁니다.

if [ -z "" ];then
    echo "This is zero"
fi
 
if [ -z "abc" ];then
    echo "This is not zero"
fi

대략 위와 같은 식입니다.
(테스트를 해보진 않았습니다.)

hyper9의 이미지

말씀해 주신것처럼 잘 동작합니다.

위에 적어 주신 예에서는 "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"라고 찍도록 만들 수 있는 방법은
없을까요?

또 조언 부탁드리면서,,질문 드립니다..
감사합니다. ^^

hyper9의 이미지

if [ -z "gz_file_list" ]
라고 하면 안되고..

if [ -z "$gz_file_list" ] 라고 했어야 하는건데
한글자 빼먹은걸 이제야 봤네요..

암튼 해결은 된 셈이네요..
감사합니다. ^^

mnnclub의 이미지

zero 에 약자아닐까요?

-x 옵션은 exist 의 약자였고..

보통 -f 가 force 의 약자이듯..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.