GUI 환경에서 드래그 앤 드롭으로 바꾸기를 수행하면 파일 및 전체 디렉터리(콘텐츠 포함)가 복사된 콘텐츠로 대체됩니다. "mv" 명령을 사용하여 동일한 직관적인 결과를 얻을 수 있는 방법이 있습니까?
답변1
.mv
(이름에도 불구하고) 핵심 기능 mv
은이름을 바꿔라한 가지. UNIX가 보장하는 것 중 하나는 이름 바꾸기가 원자적이라는 것입니다. 즉, 부분적으로 완료된 이름 바꾸기를 볼 수 없습니다. 이 보증은 예를 들어 다른 프로그램에서 볼 수 있는 파일을 변경 /etc/passwd
하고 해당 파일의 이전 버전이나 최신 버전을 표시하려는 경우에 유용합니다.그리고 다른 가능성은 없어. 그러나 당신이 설명하는 "재귀적 이름 바꾸기"는 보장을 깨뜨립니다. 중간에 중지하면 지저분해질 수 있는 반쯤 움직이는 트리를 얻을 수 있으므로 이 철학에는 실제로 적합하지 않습니다 mv
. mv -r
이것이 존재하지 않는 이유에 대한 내 추측은 다음과 같습니다 .
(이것은 mv
다른 더 작은 방식으로 아이디어를 깨뜨린다는 점을 염두에 두지 마십시오. 예를 들어 파일이 한 파일 시스템에서 다른 파일 시스템으로 이동되면 . 작업이 mv
실제로 cp
수행됩니다.)rm
철학은 충분하다. 한 위치에서 다른 위치로 트리를 재귀적으로 이동("드래그 앤 드롭")하려는 경우동일한 파일 시스템에서, mv
다음과 같은 효율성과 속도를 얻을 수 있습니다(예:).
cp -al source/* dest/ && rm -r source/*
-l
to 플래그는 cp
"복사보다는 하드 링크 생성"을 의미합니다. 즉, 이전 파일 이름과 동일한 파일 데이터를 가리키는 새 파일 이름을 효과적으로 생성합니다. 그러나 이는 하드 링크를 지원하는 파일 시스템에서만 작동합니다. 따라서 모든 기본 UNIX 스타일 파일 시스템에서는 작동하지만 FAT에서는 작동하지 않습니다.
&&
"이전 명령이 성공한 경우에만 다음 명령을 실행하십시오"를 의미합니다 . 원하는 경우 두 명령을 동시에 실행할 수 있습니다.
답변2
mv
대상의 비어 있지 않은 하위 디렉터리는 교체되지 않기 때문에 설명하는 끌어서 놓기 동작을 복제할 수 없다고 생각합니다 .
아마도 rsync
? 그것은 마치 rsync -a -r source/ target/
? 실행을 사용하려면 -v -n
먼저 상세한 테스트 실행을 수행하여 요구 사항을 충족하는지 확인하세요.
답변3
mv -f /path/to/source/folder/* /destination/folder/
파일 및 디렉터리를 포함하여 /path/to/source/folder에 있는 모든 항목을 /destination/folder로 이동합니다.
그리고 기존 파일과 디렉터리를 덮어씁니다.
답변4
이 질문에 대한 정답을 변경하고 싶을 수도 있습니다.
https://github.com/iaindooley/pickdrop
예:
내가 가지고 있다고 가정해 보세요:
test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png
이 물건을 /site로 옮기고 싶어요
그래서 그것은 다음과 같습니다:
site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png
나는 갈 수있다:
cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop
이것은 실제로 잘라서 붙여넣은 것입니다.