여러 디렉터리의 가장 큰 파일로 구성된 압축 아카이브를 만드는 방법은 무엇입니까?

여러 디렉터리의 가장 큰 파일로 구성된 압축 아카이브를 만드는 방법은 무엇입니까?

특정 임계값을 초과하는 여러 디렉터리의 가장 큰 파일을 포함하는 압축 아카이브를 생성하는 스크립트를 작성하고 싶습니다. 예를 들어, 2MB보다 큰 파일 5개를 가져와서 largestfile.tar.gz지금까지 가지고 있는 파일에 넣는 방법을 알고 싶습니다 .

du -a $path | sort -n -r | head -n 5 > diskspacefile.txt
file=$(cat diskspacefile.txt)
while read p; do
    filesize=echo $p | awk '{print $1 }'
    if [ $filesize > 2000000 ] 
    then
        zipfile=`echo $p | awk '{print $2 }'`
        tar -zcvf largestfile.tar.gz $zipfile
    fi
done

불행히도 이것은 작동하지 않는 것 같습니다. 실행하면 아카이브에 파일이 하나만 표시되거나 파일이 전혀 표시되지 않습니다. 맥락상 내가 관심을 갖는 디렉터리는 및(즉 , 코드 조각의 변수 값 /root이 됩니다 )입니다./bootpath

답변1

먼저, 이를 사용하여 find특정 디렉터리에서 2MB보다 큰 모든 파일 목록을 생성할 수 있습니다.

find . -type f -size +2M

우리는 이 목록에서 가장 큰 파일 5개를 추출하려고 합니다. 이를 위해 -printf아래와 같이 파일 경로와 파일 크기를 바이트 단위로 인쇄하는 옵션을 사용할 수 있습니다 .

find . -maxdepth 1 -type f -size +2M -printf '%s:%P\n'

이제 이러한 결과를 파일 크기(내림차순)별로 정렬할 수 있으며 순서가 지정된 목록의 처음 5개 결과를 정렬할 수 있습니다.

find . -maxdepth 1 -type f -size +2M -printf '%s:%P\n' | sort -rnk1

다음으로 파일 크기를 삭제하여 현재 디렉터리에서 2M가 넘는 가장 큰 5개 파일의 상대 경로를 검색합니다.

find . -maxdepth 1 -type f -size +2M -printf '%s:%P\n' | sort -rnk1 | head -n 5 | cut -d: -f2-

tar마지막으로, 이러한 파일의 압축된 아카이브를 생성하기 위해 이 파일 경로 목록을 명령에 전달할 수 있습니다 .

tar czf largestfile.tar -T <(find . -maxdepth 1 -type f -size +2M -printf '%s:%P\n' | sort -rnk1 | head -n 5 | cut -d: -f2-)

관련 정보