RHEL-7에서 수백만 개의 파일이 포함된 폴더를 처리하는 가장 좋은 방법은 무엇입니까? [폐쇄]

RHEL-7에서 수백만 개의 파일이 포함된 폴더를 처리하는 가장 좋은 방법은 무엇입니까? [폐쇄]

내 상황은 매우 어색합니다. 저는 62GB RAM을 갖춘 RHEL-7 컴퓨터를 사용하고 있습니다. 이 컴퓨터에는 약 800만 개의 파일이 들어 있는 여러 폴더가 있습니다.

안타깝게도 이 폴더로 작업하기가 어렵습니다. 파일 나열과 같은 기본 작업을 수행하는 것이 매우 느리다는 것을 알았습니다.

예를 들어 ls -l ~/large_directory | head -5시간이 오래 걸립니다.

복사 명령의 문제는 더 심각합니다. 이 폴더에서 다른 폴더로 파일을 복사해야 합니다. 일반적인 복사 명령 cp ~/large_directory/*.js /processing_directory/도 작동하지 않습니다. xargs아니면 비슷한 것을 사용해야 할 것 같아요 .

어떤 의견이라도 감사하겠습니다.

답변1

읽고 man find xargs cp다음과 같은 일을 해보세요

find ~/bigdir -type f -name '*.js' -print0 | \
    xargs -0 -r echo cp --target-directory=~/destination

echo결과가 만족스러우면 " "을(를) 제거하십시오.

답변2

이럴 때 미드나잇 커맨더는 좀 더 편안하게 작업할 수 있도록 도와주는 도구라고 생각합니다. less와 마찬가지로 스트림을 사용하여 파일을 나열하므로 이론적으로는 가능한 한 좋은 성능을 갖습니다.

또한 파일을 복사하기 전에 사용할 수 있도록 "필터" 기능도 제공합니다. 파일을 시각화하기가 더 쉬워지므로 파일을 반복해서 나열할 필요가 없습니다. 게다가 보기/편집 기능을 사용하면 폴더를 다시 나열할 필요 없이 파일을 열고 편집할 수 있습니다.

답변3

이것저것 그냥 던지는데...

유사한 작업을 수행하는 쉘 스크립트에 어떤 문제가 있습니까?

tar -cf newdir/a/a.tar /hugedir/a*
tar -cf newdir/b/b.tar hugedir/b*

아니면, 그런 것,

cd hugedir/
mkdir a
mkdir b
ln -s a* ./a/
ln -s b* ./b/

또 다른 아이디어는 정렬 순서 대신 디스크 순서로 각 파일에 대해 작동하는 논리적 목록/루프 또는 비교 논리(해당 언어가 지원하고 생성하는 모든 것)를 전달할 수 있는 Python 또는 bash와 같은 언어를 사용하는 것입니다. 예, 스크립트 방법은 각 파일에 액세스하므로 시간이 오래 걸리지만 한 번만 실행됩니다.

이렇게 많은 수의 파일을 사용하기 위해 더 작은 덩어리로 정렬하는 매우 간단한 방법이 있어야 합니다.

개인적으로 저는 이 파일들이 무엇인지 궁금하고, 다른 분들도 궁금해하실 것이라 확신합니다.

답변4

cpio패스스루 모드는 매우 효율적이며 많은 파일이 포함된 대규모 디렉터리 트리에 널리 사용되었습니다.

$ find /bigdatadir -print | cpio -pdm /newbigdatadir

관련 정보