다양한 크기의 150만 개의 파일(메일 파일)이 들어 있는 폴더가 있습니다. 예를 들어, 디렉토리를 생성하고 a
폴더가 지정된 크기에 도달할 때까지 일부 파일(모두 숫자 타임스탬프로 시작)을 폴더로 이동하려고 합니다. 어떻게 해야 합니까?mv
a
a
절차 for
나 while
루프를 피하는 것은 장점(예: 한 줄)이지만 작동하는 모든 것이 좋습니다!
답변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