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 FILE
FILEから抽出または生成する名前を取得する-z
gzip圧縮の使用
代わり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はエイリアスなしで実行されます\
。\cp
cp
答え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
。私はディレクトリの内容ではなく、ディレクトリをコピーするときはいつも幸運でした。