가장 큰 파일의 이름과 크기를 인쇄하세요.

가장 큰 파일의 이름과 크기를 인쇄하세요.

디렉터리 이름이어야 하는 매개 변수를 사용하는 스크립트를 만들어야 합니다. 거기에서 모든 파일을 인쇄한 다음 가장 큰 파일과 크기를 인쇄해야 합니다. 도와주세요! 배열이 ls -l도움이 될 수 있나요?

yourfilenames=`ls $1`
for eachfile in $yourfilenames
do
   echo $eachfile
done

답변1

du명령을 사용하여 특정 파일의 크기를 얻을 수 있습니다.

모든 파일의 출력을 얻은 다음 가장 큰 파일을 인쇄하려면 다음 명령을 사용할 수 있습니다.

find /path/to/yourDirectory/ -type f -exec du  {} + | sort -rn | tee  >(echo -e "\nThe largest one is: $(head -1)")

이 명령은 find /path/to/yourDirectory/ -type f -exec du {} +크기를 가져옵니다파일만(하위 디렉토리는 크기 인쇄에 고려되지 않고 해당 파일만 고려됩니다.)

출력은 sort -nr가장 큰 파일에서 가장 작은 파일로 정렬됩니다.

출력은 tee >(echo -e "\nThe largest one is: $(head -1)")process 로 리디렉션되고 stdout또한 process 로 리디렉션되므로 echo -e ...리디렉션 $(head -1)된 출력의 첫 번째 줄만 인쇄되며 이는 최대 파일 크기를 나타냅니다.

이것을 사용하여 인쇄하면 echo -e "\nThe largest one is: $(head -1)"출력은 다음과 같습니다.

The largest one is: 736K        ./path/to/yourdir/largestfilesize

위에서 볼 수 있듯이 치수는 경로 앞에 인쇄됩니다. 크기보다 먼저 경로를 얻으려면 다음을 사용할 수 있습니다.

find /path/to/yourDirectory/ -type f -exec du  {} + | sort -rn | \
tee  >(echo -e "\nThe largest one is: $(head -1 | awk -v OFS='   ' '{print $2,$1}')")

파일 크기를 알고 싶다면사람이 읽을 수 있는형식(4M, 5G, 3K 등)인 경우 해당 형식으로 인쇄하려면 올바른 옵션을 사용해야 합니다.

find /path/to/yourDirectory/ -type f -exec du -h {} + | sort -rh | \
tee  >(echo -e "\nThe largest one is: $(head -1)")

#or

find /path/to/yourDirectory/ -type f -exec du -h  {} + | sort -rh \
tee  >(echo -e "\nThe largest one is: $(head -1 | awk -v OFS='   ' '{print $2,$1}')")

#du -h prints the file sizes in human readable format
#sort -h will sort the output comparing the human
#readable numbers (e.g., 4M,5G,3K, etc)

관련 정보