cp 명령은 기존 파일을 덮어쓰지 않습니다.

cp 명령은 기존 파일을 덮어쓰지 않습니다.

git 저장소의 파일을 가상 호스트 폴더로 복사하고 있지만 다음 명령 중 어느 것도 기존 파일을 덮어쓰지 않습니다.

sudo cp -R /home/git/repo /var/www/website
sudo cp -R -f /home/git/repo /var/www/website

cp명령이 기존 파일을 덮어쓰는지 어떻게 확인할 수 있나요 ?


편집: webdir에서 저장소로 파일을 복사하는 빠른 테스트가 파일을 덮어쓰므로 분명히 뭔가( www-data?)가 webdir의 파일을 잠그고 있습니다. 출력 mount:

~$ mount | column -t
sysfs       on  /sys                             type  sysfs       (rw,nosuid,nodev,noexec,relatime)
proc        on  /proc                            type  proc        (rw,nosuid,nodev,noexec,relatime)
udev        on  /dev                             type  devtmpfs    (rw,nosuid,relatime,size=1005964k,nr_inodes=251491,mode=755)
devpts      on  /dev/pts                         type  devpts      (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs       on  /run                             type  tmpfs       (rw,nosuid,noexec,relatime,size=204840k,mode=755)
/dev/vda1   on  /                                type  ext4        (rw,relatime,errors=remount-ro,data=ordered)
securityfs  on  /sys/kernel/security             type  securityfs  (rw,nosuid,nodev,noexec,relatime)
tmpfs       on  /dev/shm                         type  tmpfs       (rw,nosuid,nodev)
tmpfs       on  /run/lock                        type  tmpfs       (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs       on  /sys/fs/cgroup                   type  tmpfs       (ro,nosuid,nodev,noexec,mode=755)
cgroup      on  /sys/fs/cgroup/systemd           type  cgroup      (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore      on  /sys/fs/pstore                   type  pstore      (rw,nosuid,nodev,noexec,relatime)
cgroup      on  /sys/fs/cgroup/hugetlb           type  cgroup      (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup      on  /sys/fs/cgroup/freezer           type  cgroup      (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup      on  /sys/fs/cgroup/cpu,cpuacct       type  cgroup      (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup      on  /sys/fs/cgroup/memory            type  cgroup      (rw,nosuid,nodev,noexec,relatime,memory)
cgroup      on  /sys/fs/cgroup/devices           type  cgroup      (rw,nosuid,nodev,noexec,relatime,devices)
cgroup      on  /sys/fs/cgroup/net_cls,net_prio  type  cgroup      (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup      on  /sys/fs/cgroup/pids              type  cgroup      (rw,nosuid,nodev,noexec,relatime,pids)
cgroup      on  /sys/fs/cgroup/blkio             type  cgroup      (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup      on  /sys/fs/cgroup/cpuset            type  cgroup      (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup      on  /sys/fs/cgroup/perf_event        type  cgroup      (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1   on  /proc/sys/fs/binfmt_misc         type  autofs      (rw,relatime,fd=27,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
debugfs     on  /sys/kernel/debug                type  debugfs     (rw,relatime)
mqueue      on  /dev/mqueue                      type  mqueue      (rw,relatime)
hugetlbfs   on  /dev/hugepages                   type  hugetlbfs   (rw,relatime)
fusectl     on  /sys/fs/fuse/connections         type  fusectl     (rw,relatime)
tmpfs       on  /run/user/1000                   type  tmpfs       (rw,nosuid,nodev,relatime,size=204840k,mode=700,uid=1000,gid=1000)

그리고:

df -h /var/www
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        30G   20G  8.9G  69% /

답변1

대신 큰 나무 cp에 사용하는 것을 선호합니다 ..tar

예, 저는 cp -r구문을 거의 사용하지 않습니다(하드 링크 백업을 제외하고 cp -al매우 구체적입니다).

tar의 구문은 큰 트리를 복사하기 위한 다양한 최적의 구성을 허용합니다. 복사할 수 있는 것과 복사할 수 없는 것(파일, 권한, 소유자 등)을 참조하십시오 man tar.

나는 tar다음 명령에 익숙한 것을 선호합니다.

로컬호스트에서:

 tar -cpC /path/to/source . | tar -xpC /path/to/target

.(지정된 사항에 유의하십시오.무엇을 저장할 것인가).

tar원격 복제에 대해 잘 알고 있으면 도움이 될 수 있습니다.

ssh user@remotesource tar -zcpC /path/to/source . | tar -zxpC /path/to/target

또는

tar -zcpC /path/to/source . | ssh user@targethost tar -zxpC /path/to/target

심지어

ssh user@remotesource tar -zcpC /path/to/source . |
    ssh user@targethost tar -zxpC /path/to/target

원격 및/또는 다른 호스트에서 사용자 계정을 복사할 때 --numeric-owner다음 옵션이 마음에 들 수 있습니다.

  • --one-file-system로컬 파일 시스템에 보관
  • --overwrite기존 파일 덮어쓰기
  • -T, --files-from FILEFILE에서 추출하거나 생성할 이름 가져오기
  • -zgzip 압축 사용

대신 tar에 사용하지 않으시겠습니까?cpio

~처럼imz - 이반 자하랴체프주석 처리하면 cpio동일한 작업을 수행할 수 있지만 구문은 다릅니다.

cpio저장해야 하는 inode 목록(파일, 디렉터리, 개발, 소켓, fifo)파일제출자STDIN.

하지만 cpio모델을 제공--pass-through파일을 다른 디렉터리로 복사할 수 있습니다.

이는 구문을 더욱 강력하게 만들지 만 이 목록을 작성할 때 find의 힘을 사용하여 find필요한 것을 정확하게 복사할 수 있습니다.

cd /path/to/source
find . \( -type f -o -type d \) ! -name '*.foo' -print0 | 
    cpio --null -pvd /path/to/destination

원격으로 사용하면 다음을 수행할 수 있습니다.

ssh user@remotesource /bin/sh <<<'cd /path/to/source;
    find . \( -type f -o -type d \) ! -name '*.foo' -print0 |
    cpio --null -o |
    gzip' |
  ssh user@targethost 'cd /path/to/destination && gunzip | cpio -id'

답변2

sudo이것을 루트(사용)로 실행하고 있으므로 루트 또는 ?에 별칭이 있는지 확인했습니까 ? 그것은 다음과 같습니다:cp.bashrc.profile

alias cp="cp -i"

\아래와 같이 " "를 사용하여 명령을 실행해 보세요 .

sudo \cp -R /home/git/repo /var/www/website

in은 별칭 없이 실행됩니다 \.\cpcp

답변3

파일이 .로 끝나기를 원하는 것처럼 들리지만 /var/www/website/index.html위 구문을 사용하면 파일이 /var/www/website/repo/index.html.

/var/www/website/repo/새 파일이 포함된 디렉터리가 있는지 확인하여 실제로 이런 일이 발생하는지 확인할 수 있습니다 .

해결책은 효율성을 높이기 위해 cp -R source/* dest/또는 a와 같은 것을 사용하는 것입니다.rsync -a source/ dest/

답변4

나는 그것을 시도해 볼 것을 권하고 싶습니다 sudo cp -Rf /home/git/repo/* /var/www/website. 나는 디렉토리의 내용보다는 디렉토리를 복사할 때 항상 운이 더 좋았습니다.

관련 정보