파일을 크기순으로 이동할 수 있나요?
좋다:
mv /path/to/x /path/to/y
여기서 x와 y는 디렉터리입니다. 그러나 작은 파일이 먼저 이동됩니다. 아니면 더 큰 파일을 먼저 사용하세요.
또한, 이렇게 하지 않을 이유가 있나요?
답변1
다음과 같이 할 수 있습니다(테스트되지 않음).
for file in `ls --sort=size /path/to/x/*`; do mv $file /path/to/y/; done
--reverse 매개변수를 ls에 추가하여 정렬을 반대로 할 수 있습니다. 파일 이름에 공백이 포함되어 있으면 $file을 인용해야 할 수도 있습니다.
... mv "$file" /path/to/y/ ...
파일 이름에 큰따옴표가 포함되어 있으면 정말 문제가 됩니다.
다음이 작동할 수도 있지만 mv 구현에 따라 다르며 매우 많은 파일에서 작동하지 않을 수도 있습니다(파일 이름의 공백 및/또는 따옴표에 여전히 문제가 있습니다).
mv `ls --sort=size /path/to/x/*` /path/to/y/
당신은 "이 일을 하지 않을 이유가 있나요?"라고 묻습니다. 질문은 거꾸로 되어야 합니다. 이렇게 할 이유가 있나요? 이유가 있다면 계속해서 그렇게 하세요.
답변2
파일을 이동하는 경우단일 파일 시스템 내에서, 파일의 데이터는 이동되지 않습니다. 파일 이름만 디렉터리 간에 이동됩니다. 따라서 단일 파일 시스템 내에서 10GB 파일을 즉시 이동할 수 있습니다. 따라서 가장 작은 파일만 먼저 이동할 수 있도록 모든 파일의 크기를 찾는 수고는 시간 낭비가 됩니다(이 경우).
답변3
그렇게 하지 않는 이유는 이동하기 전에 모든 파일의 색인을 구축해야 하기 때문입니다. 그런 다음 모든 파일의 크기를 확인하고 정렬하십시오.전에복사를 시작할 수도 있습니다.
그리고 복사 프로세스 전에 계산한 상태가 정확히 동일하다는 보장은 없습니다.~ 동안따라서 복사 프로세스가 무의미해집니다.