ls -ld를 사용하여 Linux에서 디렉터리를 표시하면 다음과 같은 결과가 나타납니다.
user@shell:~/somedirectory$ ls -ld
drwxr-xr-x 2014 K-rock users 65536 20011-11-05 11:34
user@shell:~/somedirectory$
somedirectory
위 결과를 사용하여 하위 디렉터리 및 파일 수를 어떻게 찾을 수 있나요 ? 내가 이해한 바에 따르면 링크 수는 하위 디렉터리 수에 해당하지만 파일 수는 어떻습니까? ls -ld
이 숫자를 찾기 위해 결과를 어떻게 읽어야 합니까 ?
또한 이는 위에 표시된 결과를 사용하여 특정 디렉터리의 파일 및 하위 디렉터리 수를 알려야 하는 과제입니다. 불행히도 다른 코드는 실제로 사용할 수 없습니다.
답변1
얻은 출력에서 암호를 해독하려고 하므로 작업을 단순화하려고 노력하겠습니다.
ls -ld
drwxr-xr-x 4 root root 4096 Nov 11 14:29 .
이제 ls -ld
위의 출력이 디렉터리에 제공됩니다. 이제 집중해야 할 것은 숫자 4입니다. 4는 다음에 해당합니다.
- 상위 디렉토리에 있는 디렉토리 항목입니다.
- 디렉토리 자체 항목
.
; ..
디렉토리 내의 하위 디렉토리 2개에 있는 항목입니다.
이를 확인하기 위해 다음 명령을 실행하면 ls
더 많은 디렉터리가 있음을 알 수 있습니다. 따라서 이는 귀하의 사례 결과에서 무엇을 해석할 수 있는지에 대한 아이디어를 제공합니다.
drwxr-xr-x 2014 K-rock users 65536 20011-11-05 11:34
내부에는 2012개의 하위 디렉터리가 있으므로 출력에 2014가 표시됩니다.
파일 수는 출력에서 찾을 수 없습니다.
내 이론이 맞는지 테스트하기 위해 다음 테스트를 수행했습니다.
ls -la | grep -E '[d]' #Display only directories
drwxr-xr-x 12 root root 4096 Nov 11 14:42 .
drwxr-xr-x 4 root root 4096 Nov 11 14:20 ..
drwxr-xr-x 3 root root 4096 Nov 11 14:45 hello1
drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello2
drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello3
drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello4
drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello5
drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello6
drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello7
drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello8
drwxr-xr-x 2 root root 4096 Nov 11 14:21 hello-subdir
drwxr-xr-x 2 root root 4096 Nov 11 14:29 spaced hello
이제 ls -ld
명령을 실행하면 다음과 같은 결과가 나옵니다.
ls -ld
drwxr-xr-x 12 root root 4096 Nov 11 14:42 .
폴더 하위 디렉터리 내의 중첩된 파일이나 하위 디렉터리는 고려하지 않습니다. 기본적으로 위 명령은 내 폴더에 10개의 디렉터리가 있다는 의미입니다.
추신: 출력에서 무언가를 구문 분석하는 것은 일반적으로 ls
신뢰할 수 없기 때문에 좋지 않은 생각입니다. 사용할 기회가 있으면 find
대신 with를 사용하세요.-maxdepth
답변2
을 사용할 수 있다면 내장된 기능도 사용할 수 있다고 ls
가정합니다 .bash
bash
현재 디렉터리의 모든 항목 수를 계산하려면 pure를 사용하세요 .
$ num_entries () ( # Define a function to:
> shopt -s nullglob # expand * to empty string if no files
> shopt -s dotglob # include .files in * expansion
> a=( * ) # create array containing all entries in current directory
> echo ${#a[@]} # display length of array (number of directory entries)
> )
$ num_entries # call function for current directory
467
$
bash
현재 디렉터리의 모든 하위 디렉터리를 계산하려면 pure를 사용하세요 .
$ num_dirs () (
> shopt -s nullglob
> shopt -s dotglob
> a=( */ ) # note the */ glob which selects only directories
> echo ${#a[@]}
> )
설정이 해당 함수 내에서만 적용되고 다른 부작용이 없도록 ( )
함수 본문 안에 넣었습니다 .shopt
답변3
간단한 경우에는 다음과 같이 작동합니다.
ls -A1 | wc -l
답변4
여러 가지 방법을 결합할 수 있습니다
디렉토리의 파일 수
ls -l | grep "^-" | wc -l
하위 디렉터리 탐색
find ./subdirectory -type d
명령을 내리다
find ./subdirectory -type d | xargs -I{} sh -c "ls -l {} | grep -c '^-'"
디렉터리에 보관된 파일 수는 반복적으로 계산됩니다.
물론 출력물을 장식하거나 풍부하게 만드는 방법에는 여러 가지가 있습니다.