나는 Linux를 사용하고 있는데 그것은 나에게 새로운 것입니다. 쉘 스크립트를 만들었습니다 countfiledirs
. 특정 디렉터리에 있는 파일과 디렉터리의 개수를 알고 싶습니다.
내 코드는 다음과 같습니다
#!/bin/bash
echo "total directories:" `find . -type d | wc -l`
echo "total files:" `find . -type f | wc -l`
이 명령을 실행하면 다음과 같이 표시됩니다../countfiledirs
total directories: 148
total files: 255
이 명령을 사용하면 얼마나 많은 디렉터리와 파일이 있는지 알고 싶습니다 ./countfiledirs /usr/share
.
답변1
wc -l
파일과 디렉토리의 이름에는 개행 문자가 포함될 수 있으므로 지금처럼 "그냥" 사용할 수는 없습니다 .
인수를 받아들이고 파일 및 디렉터리 수를 반복적으로 계산하는 스크립트를 원하는 경우 다음을 사용해야 합니다.
#!/bin/bash
echo -n 'total directories:'; find "$1" -type d -printf \\n | wc -l
echo -n 'total files:'; find "$1" -type f -printf \\n | wc -l
그리고 디렉터리를 명령줄 인수로 제공하여 스크립트를 호출합니다.
./your_script_name /home/e_g_your_home_dir.
간단히 말해서 위의 내용은 디렉토리이지만(디렉토리 자체를 "디렉토리"로 간주하지 않는 한) wc -l
NUL로 끝나는 "라인"을 처리하고 다음을 사용할 수 있는 것으로 대체할 수도 있습니다.-print0
#!/bin/bash
echo -n 'total directories:'; find "$1" -type d -print0 | python -c "import sys; print len(sys.stdin.read().split('\0'))-2"
echo -n 'total files:'; find "$1" -type f -print0 | python -c "import sys; print len(sys.stdin.read().split('\0'))-1"
이 작업을 반복적으로 수행하지 않으려면(지정한 디렉터리의 파일/디렉터리를 계산하지 않고 지정한 디렉터리의 파일/디렉터리만 계산) 인수 -maxdepth 1
뒤에 를 추가 해야 합니다 $1
.
답변2
명령줄에서 첫 번째 인수를 수락해야 합니다 $1
. 이상적으로는 변수에 할당하는 것이 좋습니다 DIR="$1"
. 아무것도 제공되지 않으면 현재 디렉터리를 기본값으로 사용하려는 것 같습니다 .
. or를 사용하여 이 작업을 수행 할 수 있으며 test -z "$DIR" && DIR='.'
, 보다 관용적인 방법은 변수를 사용하고 기본값을 제공하는 것입니다 "${DIR:-.}"
.
그것들을 합치면 다음과 같은 결과를 얻을 수 있습니다:
#!/bin/bash
DIR="$1"
echo "total directories: $(find "${DIR:-.}" -type d -ls | wc -l)"
echo "total files: $(find "${DIR:-.}" -type f -ls | wc -l)"
그런데 귀하가 게시한 원본 코드(질문을 편집하기 전)가 작동하지 않았습니다.
echo "total directories:" find . -type d | wc -l
find . -type d | wc -l
백틱 안에 넣거나 `...`
더 나은 방법으로는 생성자에 넣어야 합니다 $( ... )
. 여기서는 두 번째 방법을 사용했습니다. 간단한 경우에는 동일할 수 있지만 $( ... )
일반적으로 더 강력합니다.