우분투 12.04 LTS 64비트.
수천 개의 파일이 있는 디렉터리에서 Samba 공유로 예약된 작업 복사본을 만들려고 합니다(중복은 건너뛰는 동안). GUI를 통해 Samba 공유를 매핑했습니다.
내가 시도한 명령은 다음과 같습니다.
cp /home/security/Brick/* ~/.gvfs/"atm-bak-01.local/Brick의 캠" -n
이것을 찾았지만 필요한 구문으로 변경하는 방법을 모르겠습니다.
찾기 -max깊이 1 -이름 '*.prj' -exec mv -t ../prjshp {} +
어떤 힌트라도 대단히 감사하겠습니다.
답변1
문제는 쉘이 /home/security/Brick/*
긴(너무 긴) 파일 목록으로 확장한다는 것입니다.~ 전에에 전달합니다 cp
.
모든 디렉토리를 복사하려면 Brick
아마도 가장 간단한 방법은 다음과 같습니다.
cp -rn /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local"/
"recursive" 플래그를 사용하여 cp
. 이렇게 하면 Brick 아래의 모든 구조도 복사됩니다(하위 디렉터리 포함).
한 가지 가능성은 for
루프를 사용하는 것입니다.
for file in /home/security/Brick/*;
do
cp -n $file ~/.gvfs/"cam on atm-bak-01.local/Brick"
done
또는 찾기를 사용하여:
find /home/security/Brick/ -type f -exec cp -n {} ~/.gvfs/"cam on atm-bak-01.local/Brick" \;
이 명령에서는 -type f
파일만 선택하고(디렉토리 없음) 각 파일에 대해 지정된 명령을 실행합니다. 는 {}
파일 이름으로 대체되고 절을 \;
닫는 데 필요한 세미콜론입니다 -exec
. 그렇지 않으면 쉘이 이를 해석하고 제거합니다. ).
이후 명령은 -exec
원하는 것이 무엇이든 될 수 있습니다(예를 들어 아카이브 모드(타임스탬프 및 타당성 포함)에서 복사하고 덮어쓰는 데 cp -n
사용할 수 있는 대신 다른 명령(cp -av
하지만: 먼저 쉘 이스케이프, 글로빙 및 인용을 이해해야 합니다. 그렇지 않으면 많은 해를 끼칠 수 있습니다. --- 예를 참조하세요."쉘 학습").
찾기는 매우 강력한 명령입니다. 잘 배울 가치가 있습니다. 흥미로운 튜토리얼을 발견했습니다여기,여기그리고여기.
다음을 사용하여 백업 수행 정보 cp -n
:
플래그 -n
는 기존 파일을 덮어쓰지 않으므로 이전에 복사한 로컬 디렉터리의 파일을 변경하면~ 아니다다시 복사하면... 이전 버전을 백업할 수 있습니다.
이러한 이유로 다음과 같은 백업 또는 동기화 유틸리티를 사용하는 것이 좋습니다.조화또는재동기화, 이 일을 하려고요. 이러한 유틸리티는 변경된 파일만 업데이트하고 쓰기(및 네트워크 대역폭)를 최소화할 수 있으며 일반적으로 훨씬 안전합니다. 다음과 rsync
같이 간단히 말하면 백업을 해결할 수 있습니다 .
rsync -azvv /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local/Brick"
(마지막에 "/"를 추가하지 않도록 주의하십시오. 그렇지 않으면 rsync가 하위 디렉터리 Brick/Brick을 생성합니다. 예, rsync
강력하고 때로는 매우 변덕스럽습니다.)
Unison은 멋진 그래픽 인터페이스를 가지고 있으며 저장소에 충돌하는 변경 사항이 있는지 알려줍니다. 그래서 이것이 제가 선호하는 옵션이 될 것입니다.