디렉토리에서 가장 큰 파일을 재귀 적으로 찾으려고합니다. 해당 디렉토리 안에 서브 디렉토리가있는 경우 함수는 해당 디렉토리로 들어가서 가장 큰 파일이 있는지 확인해야합니다. 가장 큰 파일이 발견되면 상대 경로 이름과 가장 큰 파일의 이름 및 크기와 함께 출력이 표시됩니다.
전의:
dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test
class/asn
dude.h.gch: 9481628
이것이 내가 가진 것입니다 :
#!/bin/sh
clear
recursiveS() {
for d in *; do
if [ -d $d ]; then
(cd $d; echo $(pwd)/$line; du -a; recursiveS;)
fi
done
}
recursiveS
나는 잠시 동안 붙어있다. 기존의 여러 유닉스 도구를 파이프 라이닝하여 구현할 수 없습니다. 어떤 아이디어라도 좋을 것입니다!
답변
파일 크기를 가진 파일 이름을 출력 하려면 find
(여기서는 GNU라고 가정 find
) 사용 하십시오 . 종류. 가장 큰 것을 인쇄하십시오.
find . -type f -printf "%s\t%p\n" | sort -n | tail -1
파일 경로에 줄 바꿈 문자가 포함되어 있지 않다고 가정합니다.
에서 루프 사용 bash
의 GNU의 구현을 stat
:
shopt -s globstar
max_s=0
for f in **; do
if [[ -f "$f" && ! -L "$f" ]]; then
size=$( stat -c %s -- "$f" )
if (( size > max_s )); then
max_s=$size
max_f=$f
fi
fi
done
echo "$max_s $max_f"
찾기 솔루션보다 훨씬 느립니다. 또한 파일 이름은 줄 바꿈 문자로 끝나지 않으며 숨겨진 파일을 건너 뛰고 숨겨진 디렉토리로 내려 가지 않는다고 가정합니다.
-
현재 디렉토리에 호출 된 파일이 있으면 stdin에서 열린 파일의 크기가 고려됩니다.
bash
4.3 이전의 버전은 디렉토리 트리를 내릴 때 기호 링크를 따랐다 는 점에 유의하십시오 .
답변
이 명령은 정의 된 크기도 나열하는 데 도움이됩니다.
find . -type f -size +100M -exec ls -lh {} \;
답변
이것은 BSD / macOS에서 작동합니다 :
find . -type f -ls | sort -k7 -r
| head -n 3
흥미로운 항목의 숫자를 표시하기 위해 추가 할 수도 있습니다 (이 경우 3).
답변
와 zsh
, 가장 큰 일반 파일 :
ls -ld -- **/*(.DOL[1])
(물론 ls -ld --
어떤 명령으로도 대체 할 수 있습니다 . GNU ls
또는 호환 가능한 경우 사람이 읽을 수있는 크기-h
옵션 도 참조하십시오 )
.
: 일반 파일 만 (디렉토리, 심볼릭 링크, 장치, fifo 등은 아님)D
: 숨겨진 것들을 포함하고 숨겨진 디렉토리로 내려갑니다.OL
: 크기 (L
ength)로 역순으로 정렬됩니다 .[1]
: 첫 번째 경기 만.
동점이 있으면 무작위로 그 중 하나를 얻게됩니다. 알파벳 순서로 첫 번째 문자를 원할 경우 추가 on
( ame o
by n
rme)를 추가하여 타이를 알파벳순으로 정렬하십시오.
디스크 사용이 아닌 파일 크기를 고려합니다.