숨겨진 파일을 포함하는 파일 카운터 만들기

숨겨진 파일을 포함하는 파일 카운터 만들기

프로그래밍 과제의 일환으로 파일 및 디렉터리(숨겨진 항목 포함) 수를 반복적으로 계산하는 코드 조각을 만들어야 합니다. 또는 명령 을 사용할 수 없습니다 -R.finddu

다음을 사용할 수 있음을 이해합니다.

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. 그러면 bashglob에 숨겨진 파일을 포함하라는 메시지가 표시됩니다.

이 작업을 수행하고 싶지 않은 경우(예: 해당 기능이 없는 쉘을 사용하는 경우) 다음 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

챔피언처럼 일해보세요!

관련 정보