답변:
rsync
로컬 및 원격 시스템을 설명하는 많은 클라이언트 / 서버 백그라운드 작업을 수행하기 때문에 좋지 않은 선택입니다.
mv
아마도 최선의 선택 일 것입니다. 가능하면 mv directory_old directory_new
대신 시도해야합니다 mv directory_old/* directory_new/
. 이런 식으로, 당신은 백만 가지 대신 한 가지를 움직입니다.
mv
수백만에 대해 이야기 하는 경우 지원되는 최대 인수를 깰 수 있습니다.
mv
단지 inode 정보 만 업데이트하므로 mv directory_old directory_new
보다 빠르게 작동합니다mv directory_old/* directory_new
find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/
find -print0
with xargs -0
를 사용하면 이름에 공백을 사용할 수 있습니다.xargs -r
mv
이동할 것이 없으면 실행 되지 않습니다 . ( mv
소스 파일이 제공되지 않으면 불평합니다).mv -t
사용하면 먼저 필요한 대상을 지정한 다음 소스 파일을 지정할 수 있습니다 xargs
.그건 그렇고, 실제로 많은 양의 파일을 한 번에 이동 해야하는지 여부를 스스로에게 묻습니다. 일괄 처리가 과대 평가되었습니다. 나는 그것이 생성되는 순간에 물건을 처리 할 수 있다면 엄청난 양의 작업을 축적하려고하지 않습니다.
두 디렉토리가 동일한 파일 시스템에 있으면 디렉토리 mv
의 내용이 아닌 디렉토리에서 사용하십시오.
두 개의 다른 파일 시스템에 상주하는 경우 rsync를 사용하십시오.
rsync -av /source/directory/ /destination
/
소스 에서 후행 을 확인하십시오. 이것은 디렉토리 자체가 아닌 디렉토리의 내용을 복사한다는 것을 의미합니다. /
꺼져 있으면 파일은 여전히 복사되지만라는 디렉토리에 저장 /destination/directory
됩니다. /를 사용하면 파일이/destination
rsync
루트로 실행하거나 파일을 소유 한 경우 파일 소유권을 유지합니다. 또한 mtime
각각의 개별 파일을 유지 관리 합니다.
rsync
주위를 돌고있는 것처럼 보입니다 mv
. 팁 고마워!
tar cf - dir1 | (cd dir2; tar xf -)
tar cf - dir1 | ssh remote_host "( cd /path/to/dir2; tar xf - )"
'cp'를 사용하면 각 파일은 open-read-close-open-write-close를 수행합니다. Tar은 한 번에 여러 파일에서 작동하기 위해 여러 트레드뿐만 아니라 읽기 및 쓰기에 다른 프로세스를 사용합니다. 단일 CPU 박스에서도 멀티 스레드 앱이 더 빠릅니다.
tar c | tar x
하면 O (file_count) 대신 O (total_size)의 비용이 발생합니다.
그것은 (tm)에 달려 있습니다. 파일 시스템이 기록 중 복사 인 경우 복사 ( cp
또는 rsync
예를 들어)는 이동과 비교할 수 있어야합니다. 그러나 대부분의 경우 이동 ( mv
)이 가장 빠릅니다. 파일이있는 위치를 설명하는 데이터 조각을 간단히 전환 할 수 있기 때문입니다 (참고 : 지나치게 단순화 됨).
따라서 일반적인 Linux 설치에서는을 선택 mv
합니다.
편집 : @ Frédéric Hamidi는 의견에 좋은 지적이 있습니다. 이것은 동일한 파일 시스템과 디스크에있는 경우에만 유효합니다. 그렇지 않으면 데이터가 어쨌든 복사됩니다.
대상의 특성에 따라이 작업을 수행하는 가장 효율적인 방법이 결정됩니다. 하자가 로컬 시스템에있는 가정, 당신은 PWD
이다 /
지금. 및 /a
이미지의 수백만이 포함되어 있습니다. 우리의 임무는 /b
모든 하위 디렉토리 구조를 유지하면서 모든 이미지를로 이동하는 것입니다 . 또한 각각 로컬로 연결된 디스크에있는 두 개의 서로 다른 파티션에 대한 마운트 지점을 가정 /a
하고 가정 /b
합니다. 이 작업을 타 파이프 (tarpipe)로 수행하고 싶습니다. 이 때문에 당신이 사용하고 만들 시간이 걸릴 수 있습니다 screen
, tmux
또는 당신은 백그라운드 프로세스로이 작업을 실행합니다.
tar -C /a -cf . | tar -C /b -xf -
즉 모든 파일과 디렉토리를 복사합니다 /a
에 /b
이제 당신이 청소해야합니다, /a
당신이 오류없이 완료 확인 후.
mv
소스 및 대상 디렉토리가 동일한 파일 시스템에있는 경우 성능 측면에서 이길 수 있다고 생각하지 않습니다 .