수천 개의 파일 중 가장 오래된 100개 파일을 선택하고 나중에 찾을 수 있도록 해당 파일 목록을 만드는 동안 압축합니다.

수천 개의 파일 중 가장 오래된 100개 파일을 선택하고 나중에 찾을 수 있도록 해당 파일 목록을 만드는 동안 압축합니다.

동일한 접두사가 있는 디렉터리(cdr12345.csz, cdr32342.csv, cdr 98876.csv 등)에서 가장 오래된 100개 파일을 가져오고 파일에 저장된 이 100개 파일의 이름을 나열하는 방법이 있는지 알고 싶습니다. .txt를 나중에 읽고 100개 파일을 압축할 수 있습니다. 한 번에 100개만 할 수 있는데 어떻게 가장 빠른 100개를 먼저 얻을 수 있나요? zip 파일의 크기는 500mgb 미만이어야 합니다.

답변1

가장 오래된 100개 파일을 식별하는 측면에서 다음을 수행할 수 있습니다.

ls -1tr /path/to/directory/cdr* | head -n100 > filelist.txt

한 줄에 하나의 파일을 나열 -1하고(여기서는 반드시 필요하지 않음) -t수정 시간을 기준으로 최신 항목부터 정렬하고 -r정렬 순서를 반대로 합니다(즉, 최신 항목을 마지막에 나열합니다). 출력 파이프에는 head -n100처음 100줄(즉, 가장 오래된 100개 파일)이 나열됩니다. 그런 다음 출력을 filelist.txt가장 오래된 100개의 파일 이름이 포함된 파일로 리디렉션했습니다.

그런 다음 다음을 사용하여 이러한 파일을 압축할 수 있습니다.

zip backup -@ < filelist.txt

이 옵션은 표준 입력에서 파일 이름을 읽도록 지시 하고 리디렉션은 파일의 목록을 제공합니다 backup.zip.filelist.txt-@zip

이 정도 테스트를 거쳐 요구 사항을 충족하는지 확인한 후에는 다음 파일을 삭제할 수 있습니다 filelist.txt.

xargs rm < filelist.txt

그러면 다음이 남게 됩니다:

  1. filelist.txt가장 오래된 파일 목록
  2. backup.zip가장 오래된 파일의 내용

이는 500MB 파일 크기 제한을 해결하지 못합니다. 한 가지 방법은 zip 파일을 생성한 후 크기를 확인하고 너무 크면 아카이브에 포함되는 파일 수를 줄이는 것입니다.

답변2

파일 이름을 저장하고 재분석하는 것은 까다로울 수 있지만 파일 이름에 공백이나 줄 바꿈이 포함되어 있지 않으면 덜 조심스럽게 처리할 수 있습니다. 파일 이름이 직접적으로 구문 분석되지 않는 zsh를 사용하는 접근 방식을 보여 드리겠습니다.

파일 이름을 배열로 수집합니다.

files=( cdr*.csv(om[-100,-1]) )

이는 cdr으로 시작하고 끝나는 파일 이름을 일치 .csv시키되 o수정 시간을 기준으로 파일을 정렬하고 가장 오래된 100개만 선택하는 것을 의미합니다.

다음과 같은 다양한 방법으로 파일로 인쇄할 수 있습니다.

print -l $files > filelist.txt
printf 'File: %s\n' $files

이러한 파일의 zip 파일을 생성하려면 다음을 수행하십시오.

zip zipfile $files

...각 인스턴스에서 zsh는 $files변수를 각 요소로 바꿉니다. 동일한 확장을 수행하는 보다 신중한 방법은 ${files[@]}대체를 사용하는 것입니다.

답변3

주문하다

ls -1tr | head -n 100

디렉토리에서 가장 오래된 100개의 파일 목록이 제공됩니다.

이 출력을 파일(예: zip.in)로 저장할 수 있습니다. 그런 다음 이 파일을 사용하여 zip 파일을 만들 수 있습니다. 예를 들어:

zip zipfile.zip $(cat zip.in)

zip 파일이 500MB보다 작아야 하는 경우 개별 파일의 총 크기를 계산하여 500MB를 초과하는지 확인할 수 있습니다. 그러나 zip이 일부 압축을 수행하므로 이는 정확하지 않습니다. zip 파일을 생성한 후에만 알 수 있습니다.

zip.in 목록의 각 파일을 한 번에 하나씩 zipfile.zip에 추가할 수 있습니다. 각 파일을 추가한 후 zipfile.zip의 크기를 확인하여 500MB를 초과하는지 확인할 수 있습니다.

관련 정보