scp force overwrite read only files

You cannot modify/overwrite any file if you don't have write permission, and no possible scp option may change that.

In order to solve it you should connect to the server first (using ssh for instance) and modify the permission on your file. If you don't know how to do it, here's a simple command which does the trick:

chmod +w /path/to/your/file

A few notes:

  • There's probably a reason why these files are read-only. Before doing anything, make sure you know why and that changing this is not going to break anything or introduce security holes.

  • If necessary you could remove the write permission after executing your scp command (with this: chmod -w /path/to/file).

  • If there are too many files with read-only permission, you need to hunt them down. find (at least the GNU version available in most Linux distributions) has a -perm test which you can use (man find for more info).

  • Someone might suggest that you connect as root or use sudo. It'll work, but for the love of God don't. I cannot begin to tell you how wrong this would be.


If SFTP is available on the server (it usually is), you can use SSHFS. This lets you mount the remote files on the client. You need an SFTP daemon on the server and FUSE on the client.

mkdir /net/myserver
sshfs myserver:/ /net/server

You can then use any local command such as cp, chmod, rsync, etc., without having to worry whether the files are local or remote. With rsync, pass the --no-whole-file option to tell it to use its bandwidth-saving delta-transfer algorithm (which is otherwise turned off when rsync believes that both paths are local).

rsync -a --no-whole-file somedir /net/myserver/somewhere

Tags:

Scp