특정 크기 제한에 도달할 때까지 폴더에 파일을 추가하는 방법은 무엇입니까?

특정 크기 제한에 도달할 때까지 폴더에 파일을 추가하는 방법은 무엇입니까?

다양한 크기의 150만 개의 파일(메일 파일)이 들어 있는 폴더가 있습니다. 예를 들어, 디렉토리를 생성하고 a폴더가 지정된 크기에 도달할 때까지 일부 파일(모두 숫자 타임스탬프로 시작)을 폴더로 이동하려고 합니다. 어떻게 해야 합니까?mvaa

절차 forwhile루프를 피하는 것은 장점(예: 한 줄)이지만 작동하는 모든 것이 좋습니다!

답변1

max_k=1000
sum=0
target_dir_path="/target/dir"
find . -mindepth 1 -maxdepth 1 -type f -printf '%k %p\0' |
   while IFS= read -r -d $'\0' line; do
       size="${line%% *}"
       path="${line#* }"
       sum=$((sum+size))
       if [ "$sum" -le "$max_k" ]; then
           printf "%s\0" "$path"
       else
           break
       fi
    done | xargs -0 echo mv -t "target_dir_path"

답변2

원하는 크기의 특수 LV(또는 파티션)를 생성하고 "a" 디렉터리에 마운트할 수 있습니다.

여유 공간을 남기고 싶다면 이를 할당량과 결합하세요.

비슷한 질문이 있습니다:

https://stackoverflow.com/questions/8148715/how-to-set-limit-on-directory-size-in-linux

관련 정보