실수로 폴더를 FileZilla의 다른 폴더로 끌어서 놓았습니다.
~/big_folder
~/some_other_folder
이동한 폴더의 크기가 매우 큽니다. 수십만 개의 파일(node_modules, 작은 이미지 파일, 수많은 폴더)이 포함되어 있습니다.
이상한 점은 마우스를 놓으면 이동이 완료된다는 것입니다. "big_folder" 폴더가 "some_other_folder"로 이동되었습니다.
~/some_other_folder/big_folder
big_folder
(이사 후 아님 ~/
)
그러다가 오류를 깨닫고 다시 돌아가려고 했으나 FileZilla와 터미널 모두 실패했습니다.
cp -r
그런 다음 파일에 액세스하는 서버 측 코드가 있으므로 파일을 다시 복사 해야 합니다.~/big_folder
그리고 그것은 영원히 걸립니다 ...
어떻게 해야 합니까?
그건 그렇고, 다음은 FileZilla의 출력입니다(이는 뒤로 이동 실패의 결과입니다).
Status: Renaming '/root/big_folder' to '/root/some_other_folder/big_folder'
Status: /root/big_folder -> /root/some_other_folder/big_folder
Status: Renaming '/root/some_other_folder/big_folder' to '/root/big_folder'
Command: mv "big_folder" "/root/big_folder"
Error: mv /root/some_other_folder/big_folder /root/big_folder: received failure with description 'Failure'
답변1
디렉토리가 다음과 같은 경우움직이는동일한 파일 시스템(동일한 파티션) 내에서 디렉터리의 파일 경로 이름을 바꾸면 됩니다. 디렉토리 자체의 디렉토리 항목을 제외하고는 데이터를 변경할 필요가 없습니다.
언제복사디렉터리에는 각 파일의 데이터를 복사해야 합니다. 여기에는 모든 소스 데이터를 읽고 이를 대상에 쓰는 작업이 포함됩니다.
디렉토리 이동~ 사이파일 시스템에는 데이터를 대상으로 복사하고 소스에서 제거하는 작업이 포함됩니다. 단일 파일 시스템에서 데이터를 복제(복제)하는 만큼 오랜 시간이 걸립니다.
FileZilla가 디렉토리 이름을 에서 로 성공적으로 바꾸면 ~/big_folder
다음 ~/some_other_folder/big_folder
을 사용합니다.
mv ~/some_other_folder/big_folder ~/big_folder
...먼저 호출된 디렉터리가 없는지 확인하세요 ~/big_folder
(있는 경우 이동 시 해당 디렉터리 big_folder
의 하위 폴더로 저장됩니다 some_other_folder
).~/big_folder
답변2
기존 답변은 훌륭하지만 파일을 이동하고 복사할 때 어떤 일이 발생하는지 정확하게 보여줌으로써 답변을 조금 확장하고 싶습니다. 복사하는 동안 시스템 호출을 보면 다음을 볼 수 있습니다.
open("hello1.txt", O_RDONLY) = 3
open("hello2.txt", O_WRONLY|O_CREAT, 0644) = 4
read(3, "Hello, world!\n", 4096) = 14
write(4, "Hello, world!\n", 14) = 14
close(3) = 0
close(4) = 0
그러면 소스 파일이 열리고 두 번째 파일이 생성됩니다. 그런 다음 소스 파일의 내용을 메모리로 읽고 해당 메모리를 대상 파일에 씁니다. 이를 위해서는 여러 컨텍스트 스위치와 일부 디스크 I/O가 필요하며, 이는 대용량 파일의 경우 상당히 높을 수 있습니다. 그러나 파일을 이동하면 다음과 같은 내용이 표시됩니다.
rename("hello1.txt", "hello2.txt") = 0
파일이 동일한 물리적 디스크의 동일한 파일 시스템에 있는 경우에만 파일 이름이 변경되는 것을 볼 수 있다는 점을 기억하는 것이 중요합니다. 수 기가바이트 단위의 대용량 파일을 생성한 다음 집 안의 두 위치 간에 이동하면 작업이 즉시 완료되는 것을 확인할 수 있습니다. 반면, 외부 장치로 옮기면 사용 중인 장치만큼 이동에 시간이 걸립니다 cp
. 시스템 호출 추적은 첫 번째 추적과 동일하지만 끝에 있습니다 unlink("hello1.txt")
. 이는 소스와 대상이 동일한 파일 시스템에 있는 경우에만 이름 바꾸기를 사용하여 파일을 이동할 수 있기 때문입니다.