프로그래밍 과제의 일환으로 파일 및 디렉터리(숨겨진 항목 포함) 수를 반복적으로 계산하는 코드 조각을 만들어야 합니다. 또는 명령 을 사용할 수 없습니다 -R
.find
du
다음을 사용할 수 있음을 이해합니다.
listAllFiles() {
local dir=$1
local file
directoryCounter=0
fileCounter=0
hiddenFileCounter=0
hiddenDirectoryCounter=0
for file in "$dir"/*; do
if [[ -d $file ]]; then
listAllFiles "$file"
directoryCounter+=1
else if [[ -f $file ]]
fileCounter+=1
else if [[hidden directory]]
hiddenDirectoryCounter+=1
else if [[hiddenfile]]
hiddenFileCounter+=1
fi
done}
else if 문에 숨겨진 파일과 디렉터리를 포함할 수 있는 방법이 있습니까?
답변1
가장 쉬운 방법 bash
은 을 실행하는 것입니다 shopt -s dotglob
. 그러면 bash
glob에 숨겨진 파일을 포함하라는 메시지가 표시됩니다.
이 작업을 수행하고 싶지 않은 경우(예: 해당 기능이 없는 쉘을 사용하는 경우) 다음 glob을 사용할 수 있습니다 .[!.]* ..?* *
. 명백한 복잡성은 .
sum 일치를 피하는 것입니다 ..
. 첫 번째 glob은 .
로 시작하지만 2자 이상인 숨겨진 파일 과 일치합니다 ..
. 두 번째는 3자 이상으로 시작하는 숨겨진 파일과 일치합니다 ..
. 마지막은 숨겨지지 않은 파일의 일반적인 덩어리입니다.
else if 문에 숨겨진 파일과 디렉터리를 포함할 수 있는 방법이 있습니까?
사실 이것은 for
당신이 살펴봐야 할 진술이다. "$dir"/*
위에서 설명한 다른 2개의 전역 모드를 포함하도록 변경하기만 하면 됩니다 .
답변2
다음을 수행할 수 있습니다.
shopt -s nullglob
n=0
count() {
for i in "$1"/* "$1"/.*; do
if [ "${i##*/}" = . ] || [ "${i##*/}" = .. ] || [ -L "$i" ] || [ ! -d "$i" ]; then
n=$(($n + 1))
else
count "$i"
fi
done
}
count .; echo "$n"
오직바시즘shopt
위의 명령어 입니다 . 이전처럼 파일 시스템 루프를 감지 하지 못하지만 find
최소한 심볼릭 링크를 따르지는 않습니다.
답변3
이는 엄밀히 말하면 프로그래밍은 아니지만 다음과 같습니다.
$ i=$(ls -al | wc -l); echo $i - 3 | bc
챔피언처럼 일해보세요!