I had copied a directory contain C language source code files and some shell scripts from my Ubuntu 12.10 64 bit laptop to a portable hard disk some time back. I had copied it under root login. Now, today when I copied it back from the portable disk to the same laptop under root login, I observed that the file permissions had changed from the original 755 to 400 which caused some scripts to fail. How should I copy to the hard disk so that the directory and its content retain the permissions?
Your external drive is using either FAT32 or NTFS, which do not support permissions. You either need to switch to a unix compatible format on the external drive, or you can use
Maybe this is not the case, but it may depend on the filesystem: e.g. FAT32 formatted drives do not support file permissions. have a look at this question: How do I change file permissions on a FAT32 drive?.
Other than that, I would have a look at rsync manual.
-a is for archive mode, which is often what you want: permissions/owner/group preserved, recursive behavior, and quite a lot of other staff. (-P and -v increase the verbosity and gives you a better look)
specifically, the -p flag will keep your permissions.