programing

디렉토리에 파일이 있는지 셸 스크립트에서 확인

lastcode 2023. 5. 2. 22:44
반응형

디렉토리에 파일이 있는지 셸 스크립트에서 확인

셸 스크립트에서 디렉토리에 파일이 있는지 확인하려면 어떻게 해야 합니까?

이것과 비슷한 것.

if [ -e /some/dir/* ]; then echo "huzzah"; fi;

그러나 디렉터리에 하나 이상의 파일이 포함된 경우에는 작동합니다(위의 파일은 정확히 0개 또는 1개의 파일에서만 작동함).

3가지 최고의 트릭


shopt -s nullglob dotglob; f=your/dir/*; ((${#f}))

이 속임수는 100%입니다.bash하위 셸을 호출(실행)합니다.이 아이디어는 Bruno De Fraine의 아이디어로 팀밥의 코멘트로 개선되었습니다.

files=$(shopt -s nullglob dotglob; echo your/dir/*)
if (( ${#files} ))
then
  echo "contains files"
else 
  echo "empty (or does not exist or is a file)"
fi

참고: 빈 디렉터리와 없는 디렉터리(제공된 경로가 파일인 경우에도)는 차이가 없습니다.

#bash IRC 채널에 대한 '공식' FAQ에도 유사한 대안과 자세한 내용(및 더 많은 예)이 있습니다.

if (shopt -s nullglob dotglob; f=(*); ((${#f[@]})))
then
  echo "contains files"
else 
  echo "empty (or does not exist, or is a file)"
fi

[ -n "$(ls -A your/dir)" ]

이 속임수는 2007년에 게시된 nixCraft의 기사에서 영감을 받았습니다.더하다2>/dev/null출력 오류를 억제하기 위해"No such file or directory".
Andrew Taylor의 답변(2008)과 gr8can8dian의 답변(2011)도 참조하십시오.

if [ -n "$(ls -A your/dir 2>/dev/null)" ]
then
  echo "contains files (or is a file)"
else
  echo "empty (or does not exist)"
fi

또는 한 줄 바시즘 버전:

[[ $(ls -A your/dir) ]] && echo "contains files" || echo "empty"

참조: ls아온다를 합니다.$?=2디렉터리가 존재하지 않는 경우.그러나 파일과 빈 디렉토리 사이에는 차이가 없습니다.


[ -n "$(find your/dir -prune -empty)" ]

이 마지막 속임수는 Gravstar의 대답에서 영감을 받았습니다.-maxdepth 0는 대됨체로 대체됩니다.-prune필스의 말을 듣고 발전했습니다.

if [ -n "$(find your/dir -prune -empty 2>/dev/null)" ]
then
  echo "empty (directory or file)"
else
  echo "contains files (or does not exist)"
fi

을이한변주를 이용한 -type d:

if [ -n "$(find your/dir -prune -empty -type d 2>/dev/null)" ]
then
  echo "empty directory"
else
  echo "contains files (or does not exist or is not a directory)"
fi

설명:

  • find -prune는 와유합다니와 유사합니다.find -maxdepth 0를 적게
  • find -empty 및 합니다.
  • find -type d만 인쇄합니다.

참고: 교체할 수도 있습니다.[ -n "$(find your/dir -prune -empty)" ]아래의 단축 버전에 의해:

if [ `find your/dir -prune -empty 2>/dev/null` ]
then
  echo "empty (directory or file)"
else
  echo "contains files (or does not exist)"
fi

이 마지막 코드는 대부분의 경우 작동하지만 악의적인 경로가 명령을 표현할 수 있다는 점에 유의하십시오.

은 지까지사솔루션된을 합니다.lsAllbash 솔루션은 다음과 같습니다.

#!/bin/bash
shopt -s nullglob dotglob     # To include hidden files
files=(/some/dir/*)
if [ ${#files[@]} -gt 0 ]; then echo "huzzah"; fi

다음은 어떻습니까?

if find /some/dir/ -maxdepth 0 -empty | read v; then echo "Empty dir"; fi

이렇게 하면 디렉토리의 전체 내용 목록을 생성할 필요가 없습니다.read 출을삭제어예것고읽참때평표것으을가로입는다니하을만식현을하떤력예▁only▁is것:▁to(▁the▁to평iion입▁evaluate▁both다니▁discard▁true▁the▁make▁express가는▁and:/some/dir/에 의해 빈 상태로 발견됨find).

시도:

if [ ! -z `ls /some/dir/*` ]; then echo "huzzah"; fi

파일이 많은 디렉터리에 주의하십시오!평가하는 데 시간이 좀 걸릴 수 있습니다.ls지휘권

IMO 최고의 솔루션은 다음을 사용하는 것입니다.

find /some/dir/ -maxdepth 0 -empty
# Works on hidden files, directories and regular files
### isEmpty()
# This function takes one parameter:
# $1 is the directory to check
# Echoes "huzzah" if the directory has files
function isEmpty(){
  if [ "$(ls -A $1)" ]; then
    echo "huzzah"
  else 
    echo "has no files"
  fi
}
DIR="/some/dir"
if [ "$(ls -A $DIR)" ]; then
     echo 'There is something alive in here'
fi

이것의 출력을 비교해 주시겠습니까?

 ls -A /some/dir | wc -l

이것은 정말 늦은 답변일 수 있지만 여기 효과적인 해결책이 있습니다.이 줄은 파일의 존재만 인식합니다!디렉터리가 있는 경우 잘못된 긍정을 제공하지 않습니다.

if find /path/to/check/* -maxdepth 0 -type f | read
  then echo "Files Exist"
fi

ZSH

질문이 bash로 표시된 것은 알지만, 참고로 zsh 사용자의 경우:

비어 있지 않은 디렉터리 테스트

여부 foo비어 있지 않음:

$ for i in foo(NF) ; do ... ; done

어디서, 만약에foo 있지 . 이 비어있않에 . 코드는for블록이 실행됩니다.

빈 디렉터리 테스트

여부 foo비어 있음:

$ for i in foo(N/^F) ; do ... ; done

어디서, 만약에foo 비어 있습니다. 이비어있에 . 코드는for블록이 실행됩니다.

메모들

를 인용할 필요가 없었습니다.foo위에서, 하지만 우리가 필요하다면 그렇게 할 수 있습니다.

$ for i in 'some directory!'(NF) ; do ... ; done

디렉터리가 아니더라도 둘 이상의 개체를 테스트할 수 있습니다.

$ mkdir X     # empty directory
$ touch f     # regular file
$ for i in X(N/^F) f(N/^F) ; do echo $i ; done  # echo empty directories
X

디렉토리가 아닌 모든 항목은 무시됩니다.

엑스트라

우리는 글러브링을 하기 때문에 어떤 글러브(또는 브레이스 확장)도 사용할 수 있습니다.

$ mkdir X X1 X2 Y Y1 Y2 Z
$ touch Xf                    # create regular file
$ touch X1/f                  # directory X1 is not empty
$ touch Y1/.f                 # directory Y1 is not empty
$ ls -F                       # list all objects
X/ X1/ X2/ Xf Y/ Y1/ Y2/ Z/
$ for i in {X,Y}*(N/^F); do printf "$i "; done; echo  # print empty directories
X X2 Y Y2

배열에 배치된 개체를 검사할 수도 있습니다.위와 같은 디렉토리를 사용하면 다음과 같습니다.

$ ls -F                       # list all objects
X/ X1/ X2/ Xf Y/ Y1/ Y2/ Z/
$ arr=(*)                     # place objects into array "arr"
$ for i in ${^arr}(N/^F); do printf "$i "; done; echo
X X2 Y Y2 Z

따라서 배열 매개 변수에 이미 설정되어 있는 개체를 테스트할 수 있습니다.

로 의코의 for블록은 모든 디렉토리에서 차례로 실행됩니다.이것이 바람직하지 않으면 배열 매개 변수를 입력한 다음 해당 매개 변수에 대해 작업을 수행하면 됩니다.

$ for i in *(NF) ; do full_directories+=($i) ; done
$ do_something $full_directories

설명.

에게는 zsh ▁the가 있습니다.(F) 한정자)man zshexpn는 "공백이 ) 일치합니다.

$ mkdir X Y
$ touch Y/.f        # Y is now not empty
$ touch f           # create a regular file
$ ls -dF *          # list everything in the current directory
f X/ Y/
$ ls -dF *(F)       # will list only "full" directories
Y/

예전(F)일치하는 개체를 나열합니다. 는 디렉터리이며 비어 있지 않습니다.그렇게,(^F)일치: 디렉토리가 없거나 비어 있습니다.따라서,(^F)예를 들어 일반 파일도 나열할 수 있습니다.따라서, 위에서 설명한 바와 같이.zshexp맨 페이지, 우리는 또한 필요합니다.(/)디렉토리만 나열하는 글로벌 한정자:

$ mkdir X Y Z
$ touch X/f Y/.f    # directories X and Y now not empty
$ for i in *(/^F) ; do echo $i ; done
Z

따라서 지정된 디렉토리가 비어 있는지 확인하기 위해 다음을 실행할 수 있습니다.

$ mkdir X
$ for i in X(/^F) ; do echo $i ; done ; echo "finished"
X
finished

비어 있지 않은 디렉터리가 캡처되지 않도록 하기 위해 다음을 수행합니다.

$ mkdir Y
$ touch Y/.f
$ for i in Y(/^F) ; do echo $i ; done ; echo "finished"
zsh: no matches found: Y(/^F)
finished

아! 그 이후로Y비어 있지 않습니다. zsh에서 일치하는 항목을 찾을 수 없습니다.(/^F)("빈 디렉토리")를 선택하여 글로벌과 일치하는 항목을 찾을 수 없다는 오류 메시지를 표시합니다.그러므로 우리는 이러한 가능한 오류 메시지를 억제할 필요가 있습니다.(N)글로벌 한정자:

$ mkdir Y
$ touch Y/.f
$ for i in Y(N/^F) ; do echo $i ; done ; echo "finished"
finished

따라서 빈 디렉토리의 경우 한정자가 필요합니다.(N/^F)다음과 같이 읽을 수 있습니다. "실패에 대해 경고하지 않음, 꽉 차지 않은 디렉터리".

마찬가지로 비어 있지 않은 디렉토리의 경우 한정자가 필요합니다.(NF)마찬가지로 "실패에 대해 경고하지 마십시오, 전체 디렉터리"라고 읽을 수 있습니다.

디렉터리에 숨겨진 파일이 있는지 확인합니다.
#사용: "$HOME"이 비어 있는 경우, "집에 오신 것을 환영합니다"; fi#비어 있습니다({)._ief in $1/*; 하다만약 [ -e "$_ief" ]; 그렇다면반환 1fi다 했어요.반환 0}

일부 구현 참고 사항:

  • for 외호방지합니다출을에 을 피합니다.ls 을 한 읽습니다.여전히 모든 디렉토리 항목을 한 번 읽습니다.이것은 readdir()를 명시적으로 사용하는 C 프로그램을 작성해야만 최적화될 수 있습니다.
  • test -e 디렉토리의 합니다. 이 는 " " " " " 입니다. " " 입니다._ief이 됩니다. "somedir/*"는 "somedir/*"입니다.가 "합니다.
  • 이 기능은 모든 POSIX 구현에서 작동합니다.그러나 Solaris /bin/sh는 해당 범주에 속하지 않습니다.그것의.test" 구이지않니다습지하원현▁를 지원하지 않습니다.-e 깃발

디렉토리가 비어 있는지 또는 비어 있지 않은 경우 포함된 파일 수를 알려줍니다.

directory="/some/dir"
number_of_files=$(ls -A $directory | wc -l)

if [ "$number_of_files" == "0" ]; then
    echo "directory $directory is empty"
else
    echo "directory $directory contains $number_of_files files"
fi
dir_is_empty() {
   [ "${1##*/}" = "*" ]
}

if dir_is_empty /some/dir/* ; then
   echo "huzzah"
fi

이이지정파없가정니다라는 이름의 이 없다고.*안으로/any/dir/you/check효과가 있을 것입니다.bash dash posh busybox sh그리고.zsh) 하만필 (zsh의경우) 요니다가 필요합니다.unsetopt nomatch.

은 어떤 공연과 것이어야 합니다.ls떤어용로를 *(글로벌), 노드가 많은 디렉토리에서 속도가 느릴 것 같습니다(내/usr/bin3000개 이상의 파일이 있는 경우에는 그렇게 느려지지 않았습니다). 모든 dirs/filename(및 그 이상)을 인수로 함수에 전달(전달)하기 때문에 적어도 충분한 메모리를 사용합니다. 일부 셸은 인수의 수 및/또는 인수의 길이에 제한이 있을 수 있습니다.

디렉토리가 비어 있는지 확인할 수 있는 휴대용 빠른 O(1) 제로 리소스 방법이 있으면 좋습니다.

갱신하다

은 위않다를지파숨일하설/dir명니와 더 파일/dir를 예를 들어, 다음과 같은 추가 테스트가 필요한 경우.is_emptyRich's sh(POSIX 쉘) 트릭에서:

is_empty () (
cd "$1"
set -- .[!.]* ; test -f "$1" && return 1
set -- ..?* ; test -f "$1" && return 1
set -- * ; test -f "$1" && return 1
return 0 )

대신에, 저는 다음과 같은 것을 생각하고 있습니다.

dir_is_empty() {
    [ "$(find "$1" -name "?*" | dd bs=$((${#1}+3)) count=1 2>/dev/null)" = "$1" ]
}

있을 때 및이 뒤로 하는 것에 대한 는 new line( 함)을도 my dir에서 find ind ▁some▁when는▁my▁and▁on▁about),▁sadly▁dir▁sl(려우▁trailing▁argument▁concern▁the입니프다▁fromrences▁the▁the것▁(나도출게의슬▁output▁isbusybox sh무엇이 아마도 버그인지 보여줍니다.find -> dd가 " " " " " 를 사용했다면 " " " " " " " " " " " " " " " " " " ( " " " " " 을 사용했습니다.cat출력은 항상 동일한 것으로 보입니다.dd 함께과장▁argument라는 인수로count).

올리브레의 대답에서 힌트를 얻거나(또는 여러 가지), 저는 바시 함수를 좋아합니다.

function isEmptyDir {
  [ -d $1 -a -n "$( find $1 -prune -empty 2>/dev/null )" ]
}

하나의 하위 셸을 생성하지만 O(1) 솔루션에 가깝기 때문에 이름을 붙이면 읽을 수 있습니다.그러면 쓸 수 있습니다.

if isEmptyDir somedir
then
  echo somedir is an empty directory
else
  echo somedir does not exist, is not a dir, is unreadable, or is  not empty
fi

O(1)의 경우 이상한 경우가 있습니다. 큰 디렉터리에 마지막 항목을 제외한 모든 항목이 삭제된 경우, "찾기"는 빈 항목을 확인하기 위해 전체를 읽어야 할 수 있습니다.예상 성능은 O(1)이지만 최악의 경우 디렉토리 크기가 선형입니다.나는 이것을 측정하지 않았습니다.

디렉토리에 대한 엣지 가이드가 언급되지 않은 것이 놀랍습니다.이 가이드와 모든 울 엣지는 셸 유형의 질문을 위해 반드시 읽어야 합니다.

그 페이지의 주목할 점:

ls 출력을 구문 분석하지 마십시오.심지어 ls -A 솔루션도 깨질 수 있습니다(예: HP-UX에서, 당신이 루트라면, ls -A는 당신이 루트가 아니라면 그것이 하는 것과 정반대의 일을 합니다). 그리고 아니요, 저는 그렇게 멍청한 것을 만들 수 없습니다.

사실, 사람들은 직접적인 질문을 완전히 피하고 싶을 수도 있습니다.일반적으로 사람들은 디렉토리에 있는 파일과 관련된 작업을 수행하기 때문에 디렉토리가 비어 있는지 여부를 알고 싶어 합니다.더 큰 질문에 주목하세요.예를 들어, 다음과 같은 검색 기반 예제 중 하나가 적절한 솔루션일 수 있습니다.

   # Bourne
   find "$somedir" -type f -exec echo Found unexpected file {} \;
   find "$somedir" -maxdepth 0 -empty -exec echo {} is empty. \;  # GNU/BSD
   find "$somedir" -type d -empty -exec cp /my/configfile {} \;   # GNU/BSD

가장 일반적으로 필요한 것은 다음과 같은 것입니다.

   # Bourne
   for f in ./*.mpg; do
        test -f "$f" || continue
        mympgviewer "$f"
    done

즉, 질문을 하는 사람은 mympgviewer: ./*.mpg: 실제로 이러한 테스트가 필요하지 않은 경우에는 해당 파일 또는 디렉토리가 없습니다.와 같은 오류 메시지를 방지하기 위해 명시적인 빈 디렉토리 테스트가 필요하다고 생각했을 수 있습니다.

브루노의 대답은 약간 다릅니다.

files=$(ls -1 /some/dir| wc -l)
if [ $files -gt 0 ] 
then
    echo "Contains files"
else
    echo "Empty"
fi

저한테는 효과가 있어요.

몇 가지 해결 방법을 통해 디렉터리에 파일이 있는지 확인할 수 있는 간단한 방법을 찾을 수 있었습니다.이는 특히 .xml 또는 .txt 파일 등을 확인하기 위해 grep 명령을 사용하여 더 확장할 수 있습니다.예:ls /some/dir | grep xml | wc -l | grep -w "0"

#!/bin/bash
if ([ $(ls /some/dir | wc -l  | grep -w "0") ])
    then
        echo 'No files'
    else
        echo 'Found files'
fi
if [[ -s somedir ]]; then
    echo "Files present"
fi

5 5.0.17을 사용한 테스트에서[[ -s somedir ]]true가 true이면 됩니다.somedir아이들이 있습니다.에 대해서도 마찬가지입니다.[ -s somedir ]숨겨진 파일 또는 하위 디렉터리가 있는 경우에도 true가 반환됩니다.파일 시스템에 종속되어 있을 수도 있습니다.

정말로 할 수 있는 선택권이 있어야 할 것처럼 느껴집니다.test빈 디렉토리의 경우.저는 그 편집 코멘트를 테스트 명령의 유지 관리자들에게 제안으로 남기겠지만 빈 파일에 대한 대응이 존재합니다.

저를 여기까지 오게 한 사소한 사용 사례에서 저는 엄청난 수의 파일을 반복하는 것에 대해 걱정하지도 않고 .files에 대해서도 걱정하지 않습니다.나는 앞에서 언급한 "실종" 피연산자를 찾기를 희망했습니다.test체스트라게르.

아래 예제에서는 디렉토리가 비어 있고 파일이 가득 찼습니다.

$ for f in empty/*; do test -e $f; done
$ echo $?
1
$ for f in full/*; do test -e $f; done
$ echo $?
0

또는 더 짧고 더 못생겼지만 비교적 사소한 사용 사례에만 적용됩니다.

$ echo empty/*| grep \*
$ echo $?
1

$ echo full/* | grep \*
$ echo $?
0

지금까지 저는 (이상한 기호가 너무 많지 않은) 더 간단한 대답을 할 수 있을 것 같은 grep를 사용하는 답을 보지 못했습니다.본 셸을 사용하여 디렉터리에 파일이 있는지 확인하는 방법은 다음과 같습니다.

디렉터리에 있는 파일 수를 반환합니다.

ls -l <directory> | egrep -c "^-"

디렉토리가 작성되는 디렉토리 경로를 입력할 수 있습니다.파이프의 첫 번째 절반은 각 파일에 대해 출력의 첫 번째 문자가 "-"가 되도록 합니다.그런 다음 egrep은 정규식을 사용하여 해당 기호로 시작하는 줄 수를 계산합니다.이제 얻은 숫자를 저장하고 다음과 같은 역따옴표를 사용하여 비교하기만 하면 됩니다.

 #!/bin/sh 
 fileNum=`ls -l <directory> | egrep -c "^-"`  
 if [ $fileNum == x ] 
 then  
 #do what you want to do
 fi

x는 선택한 변수입니다.

가지치기와 마지막 대답을 섞으면서, 저는 할 수 있었습니다.

find "$some_dir" -prune -empty -type d | read && echo empty || echo "not empty"

공백이 있는 경로에도 작동합니다.

bash를 사용한 간단한 답변:

if [[ $(ls /some/dir/) ]]; then echo "huzzah"; fi;

는 나는할것으로 .find:

if [ -z "$(find $dir -maxdepth 1 -type f)" ]; then
    echo "$dir has NO files"
else
    echo "$dir has files"

이렇게 하면 하위 디렉터리를 거치지 않고 디렉터리에서 파일만 찾는 출력이 확인됩니다.그런 다음 다음 다음을 사용하여 출력을 확인합니다.-z에 옵한션에서 가져온 man test:

   -z STRING
          the length of STRING is zero

몇 가지 결과 보기:

$ mkdir aaa
$ dir="aaa"

빈 dir:

$ [ -z "$(find aaa/ -maxdepth 1 -type f)" ] && echo "empty"
empty

그냥 dirs in it:

$ mkdir aaa/bbb
$ [ -z "$(find aaa/ -maxdepth 1 -type f)" ] && echo "empty"
empty

디렉터리에 있는 파일:

$ touch aaa/myfile
$ [ -z "$(find aaa/ -maxdepth 1 -type f)" ] && echo "empty"
$ rm aaa/myfile 

하위 디렉터리의 파일:

$ touch aaa/bbb/another_file
$ [ -z "$(find aaa/ -maxdepth 1 -type f)" ] && echo "empty"
empty

ls, find 등과 같은 유틸리티를 호출하지 않고:

POSIX safe(즉, Bash / xyz shell / ls / 등 버전에 종속되지 않음):

dir="/some/dir"
[ "$(echo $dir/*)x" != "$dir/*x" ] || [ "$(echo $dir/.[^.]*)x" != "$dir/.[^.]*x" ] || echo "empty dir"

아이디어:

  • echo *에는 점이 아닌 이 나열됩니다.
  • echo .[^.]*에는 "." 및 "...을 제외한 도트 파일이 나열됩니다."
  • 한다면echo일치하는 항목을 찾을 수 없습니다. 검색 표현식을 반환합니다. 즉, 여기서*또는.[^.]* 실제 문자열이 아니며 문자열을 강요하기 위해 편지와 연결되어야 합니다.
  • ||단락에서 가능성을 대체합니다. 최소 하나 이상의 비점 파일 또는 dir 또는 최소 하나 이상의 점 파일 또는 디렉터리가 비어 있습니다. 실행 레벨: "첫 번째 가능성이 실패하면 다음을 시도하십시오. 이것이 실패하면 다음을 시도하십시오."; 여기서 기술적으로 Bash는 "실행을 시도합니다."echo "empty dir"빈 dir에 대한 작업을 여기에 놓습니다(예: 종료).

심볼 링크를 사용하여 확인했지만 가능한 파일 형식을 사용하여 확인하지 않았습니다.

다른 스레드에서 디렉토리가 비어 있는지 테스트하는 방법 찾기를 제안했습니다.

[ "$(cd $dir;echo *)" = "*" ] && echo empty || echo non-empty

$dir가 존재하는 이유는 "디렉토리에 파일이 포함되어 있는지 셸 스크립트에서 확인 중"이기 때문이며, bigdir에서도 *가 그리 크지 않기 때문입니다. 시스템에서 /usr/bin/*은 12Kb에 불과합니다.

업데이트: Thans @hhh skladby, 고정된 것.

[ "$(cd $dir;echo .* *)" = ". .. *" ] && echo empty || echo non-empty
if ls /some/dir/* >/dev/null 2>&1 ; then echo "huzzah"; fi;

특정 대상 디렉토리를 테스트하기 위해

if [ -d $target_dir ]; then
    ls_contents=$(ls -1 $target_dir | xargs); 
    if [ ! -z "$ls_contents" -a "$ls_contents" != "" ]; then
        echo "is not empty";
    else
        echo "is empty";
    fi;
else
    echo "directory does not exist";
fi;

명령 찾기를 사용하여 시도합니다.하드코딩된 디렉토리 또는 인수로 지정합니다.그런 다음 찾기를 시작하여 디렉토리 내의 모든 파일을 검색합니다.찾기 반환이 null인지 확인합니다.찾기 데이터 에코

#!/bin/bash

_DIR="/home/user/test/"
#_DIR=$1
_FIND=$(find $_DIR -type f )
if [ -n "$_FIND" ]
then
   echo -e "$_DIR contains files or subdirs with files \n\n "
   echo "$_FIND"
else
echo "empty (or does not exist)"
fi

나는 그것을 싫어합니다.ls - A게시된 해결 방법.디렉토리를 삭제하지 않기 때문에 디렉토리가 비어 있는지 테스트할 가능성이 높습니다.다음은 이를 수행합니다.그러나 빈 파일을 기록하려면 파일을 삭제하고 다시 생성하는 것이 무한대의 파일을 나열하는 것보다 더 빠릅니까?

이게 효과가 있을 거길...

if !  rmdir ${target}
then
    echo "not empty"
else
    echo "empty"
    mkdir ${target}
fi

다음과 같은 경우에 적합합니다(존재하는 경우).

some_dir="/some/dir with whitespace & other characters/"
if find "`echo "$some_dir"`" -maxdepth 0 -empty | read v; then echo "Empty dir"; fi

전체 확인 시:

if [ -d "$some_dir" ]; then
  if find "`echo "$some_dir"`" -maxdepth 0 -empty | read v; then echo "Empty dir"; else "Dir is NOT empty" fi
fi

언급URL : https://stackoverflow.com/questions/91368/checking-from-shell-script-if-a-directory-contains-files

반응형