Ext4 및 Linux - 한 디렉터리에 많은 수의 파일이 있음 - 작업

Ext4 및 Linux - 한 디렉터리에 많은 수의 파일이 있음 - 작업

디렉토리에 많은 수의 파일이 있는 문제가 있습니다.

파일 시스템은 ext4입니다.

2**32 파일 제한에 도달했고 이 파티션에 파일을 쓸 수도 없습니다.

문제는 엄청납니다.

일부 파일을 다른 리소스로 이동하는 방법을 모르겠습니다.

고전적인 "ls"와 "mv"는 작동하지 않습니다. 파일이 너무 많아요...

Bash에서 파일을 빠르게 출력할 수 있는 방법이 있습니까?

디렉터리당 하나의 임의 파일(약 2**32개 파일)입니다.

파일을 빨리 다운로드할 수 있으면 스크립트를 작성할 수 있습니다.

어떤 아이디어가 있나요?

답변1

다음을 실행해 보세요.

ls --sort=none --no-group

또는 특정 수의 파일을 제한하십시오.

ls --sort=none --no-group | head -500

답변2

ls큰 디렉터리에서 작업을 사용하는 것은 GNU가 ls읽기 때문에 매우 비효율적입니다.모두디렉토리의 이전 항목으로 돌아가기어느--sort=none이는 출력이 "예쁘게" 되길 원하기 때문에 사용되기도 합니다 . ext4 디렉토리에는 수백만 개의 파일이 포함될 수 있으므로 이는 느리고 RAM 집약적입니다.

find대신, 디렉토리에서 파일 이름을 읽은 후 파일 이름을 인쇄하는 디렉토리의 파일 나열을 사용해야 합니다 . 특정 파일(예: 1MB보다 작은 모든 "*.jpg" 파일)을 찾으려면 다음을 실행할 수 있습니다.

find /my/directory -type f -name "*.jpg" -size -1M

보다(1) 매뉴얼 페이지 찾기사용 방법에 대한 자세한 내용입니다.

처리할 파일 묶음을 찾으면 xargs각 파일에 대해 명령을 실행할 수 있습니다. 예를 들어 임시 파일을 삭제하려면 다음을 사용합니다.

find /my/directory -name "*.tmp" -type f -print0 | xargs -0 rm

또는 다음과 같은 다른 디렉토리로 이동하십시오.

find /my/directory -name "*.jpg" -print0 | xargs -0 -I '{}' mv '{}' /my/otherdirectory

아니면 여러 가지. 이 xargs프로그램은 표준 입력에서 읽은 각 파일에 대해 특정 명령을 실행합니다.xargs(1) 매뉴얼 페이지더 알아보기. 이 명령은 대상 디렉터리를 명령 끝에 배치해야 하기 때문에 mv조금 더 복잡합니다 . 반면 일반적으로 모든 파일은 명령이 지정된 후에 추가됩니다.rmmvxargs

파일 목록을 출력 파일(예: )에 저장 한 다음 삭제/이동하려는 파일만 포함하도록 find ... > /tmp/file_list편집하고 개별적으로 다음으로 파이프할 수 있습니다.file_listxargs

xargs -a /tmp/file_list -I '{}' mv '{}' /my/otherdir

관련 정보