Linux 시스템(Debian)에서 지정된 디렉터리의 파일과 폴더 수를 계산하려면 bash 스크립트의 도움이 필요하지만 지정된 폴더를 제외하고 싶습니다.
workdir
다른 스크립트 파일과 폴더의 이름을 딴 홈 디렉터리가 있습니다. 내부에는 workdir
이라는 디렉토리가 있습니다 mysshfs
. 나는 퓨즈/sshfs를 사용하여 폴더 내에 외부 폴더를 마운트합니다 mysshfs
.
이제 파일/디렉터리 수와 파일/디렉터리 크기에 대한 정보를 얻기 위해 몇 가지 명령을 실행하지만 directoy 를 제외하고 싶습니다 mysshfs
.
내 bash 명령이 작동합니다.
workdir
전체 크기 보기 |퓨즈/sshfs가 사용되지 않음$ du -hs workdir
|를
workdir
제외하고 전체 크기를 가져옵니다 .mysshfs
퓨즈/sshfs 사용 중$ du -hs --exclude=mysshf workdir
workdir
|에 있는 파일 수를 계산합니다.퓨즈/sshfs가 사용되지 않음$ find workdir -type f | wc -l
workdir
|의 폴더 수를 계산합니다.퓨즈/sshfs가 사용되지 않음$ find workdir -type d | wc -l
workdir
제외하고 계산 중인 파일 수mysshfs
|퓨즈/sshfs가 사용되지 않음$ find workdir -type f -not -path "*mysshfs*" | wc -l
계산의 폴더
workdir
(제외mysshfs
) |퓨즈/sshfs가 사용되지 않음$ find workdir -type d -not -path "*mysshfs*" | wc -l
명령을 사용할 때5 & 6그리고 원격 디렉터리가 mysshfs
해당 디렉터리 아래에 마운트되고 명령이 중단됩니다.
명령은 결국 작동하여 올바른 출력을 표시하지만, 그렇지 않아야 함에도 불구하고 명령이 여전히 제외된 디렉터리를 찾고 있는 것처럼 보이므로 결과를 표시하는 데 시간이 오래 걸립니다.
내 실수는 어디에 있습니까? 아니면 명령 5와 6에서 뭔가를 잊어버린 것입니까? 아니면 결과를 얻는 데 사용할 수 있는 다른 명령이 있습니까?
빠른 결과를 얻으려면 2개의 별도 명령을 사용하여 파일과 디렉터리의 수를 계산하고 fusion/sshfs를 통해 마운트된 지정된 폴더를 제외해야 합니다.
답변1
를 사용하면 하위 디렉터리로 내려가는 것을 피할 수 있습니다 -prune
. 다음 명령을 시도해 보십시오:
find workdir -path "*/mysshfs/*" -prune -o \( -type f -print \) | wc -l
find workdir -path "*/mysshfs/*" -prune \( -type d -print \) | wc -l
답변2
fuse.sshfs
FS 유형의 파일을 건너뛰려면 다음을 사용하십시오.
find workdir//. -fstype fuse.sshfs -prune -o -type f -print | grep -c //
또는 -xdev
다른 파일 시스템(모든 유형)으로 이동하지 마십시오.
wc -l
개행 문자는 파일 형식의 모든 문자만큼 유효하므로 어떠한 경우에도 이를 사용하여 파일 개수를 계산할 수 없습니다 . 여기서는 //
단 한 번만 발생하도록 보장되는 발생 횟수를 계산합니다 . 하지만 GNU를 사용하면 find
이 작업도 수행할 수 있습니다.
find workdir -fstype fuse.sshfs -prune -o -type f -printf . | wc -c
또는 유형별 파일 수에 대한 분석을 얻습니다( f
예:정기적인, d
디렉토리, l
심볼릭 링크, p
명명된 파이프 등):
find workdir -fstype fuse.sshfs -prune -o -type f -printf '%y\n' |
sort |
uniq -c