![500개 파일마다 새 디렉터리로 이동 [닫기]](https://linux55.com/image/184067/500%EA%B0%9C%20%ED%8C%8C%EC%9D%BC%EB%A7%88%EB%8B%A4%20%EC%83%88%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A1%9C%20%EC%9D%B4%EB%8F%99%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
10,665개의 JPEG 파일이 포함된 디렉터리가 있습니다.
500개의 파일을 새 디렉터리로 이동하고, 500개의 파일을 다음 디렉터리로 이동하고 싶습니다.
가장 큰 파일을 먼저 이동해야 합니다. 500-1에는 500개의 가장 큰 파일이 포함되고, 500-2에는 그 다음으로 큰 500개의 파일이 포함되는 식입니다.
이렇게 하려는 이유는 JPEG를 누군가에게 제공하고 싶은데 한 디렉터리에 JPEG가 너무 많아서 파일 관리자가 중단되기 때문입니다.
답변1
Linux 기반 시스템이나 GNU를 사용하는 기타 시스템에서는 find
다음과 같은 루프를 사용할 수 있습니다.
find -maxdepth 1 -type f -printf '%s\t%P\0' |
sort -z -rn |
(
# x is max files per directory; d is directory number; k is file counter
x=500 d=1 k=1
while IFS=$'\t' read -r -d '' size path
do
printf "%d\t%d\t%s\n" $k $d "$path" # File nr, Directory nr, Filename
echo "##" mkdir -p "/path/to/dir-$d"
echo "##" mv -f "$path" "/path/to/dir-$d/${path##*/}"
[[ $((k++)) -ge $x ]] && { k=1; ((d++)); } # Next directory
done
)
echo '##'
당신이 원하는 것을 그들이 할 것이라고 확신하면 루프에서 두 개의 액션 라인을 제거하십시오. printf
진행 상황에 대한 상태 보고서를 원하지 않으면 이를 주석 처리하세요.