Uma tentação é analisar ls
. Evite essa tentação .
O seguinte parece funcionar, no entanto, está cheio de Kluge. Ele depende de cp
mantendo as permissões do arquivo de destino. Para esta demonstração, o arquivo "template" não deve existir.
- Copie o arquivo com as permissões que você deseja para um novo arquivo
- Copie o arquivo que você deseja alterar para o arquivo criado na etapa anterior
- Remove o arquivo original que você deseja alterar
- Renomeie o arquivo intermediário para o nome do arquivo a ser alterado
Demo:
$ echo "contents of has">has
$ echo "contents of wants">wants
$ chmod ug+x has # just so it's different - represents the desired permissions
$ cp has template
$ cat has
contents of has
$ cat wants
contents of wants
$ cat template
contents of has
$ ls -l has wants template
-rwxr-xr-- 1 user user 16 2010-07-31 09:22 has
-rwxr-xr-- 1 user user 16 2010-07-31 09:23 template
-rw-r--r-- 1 user user 18 2010-07-31 09:22 wants
$ cp wants template
$ ls -l has wants template
-rwxr-xr-- 1 user user 16 2010-07-31 09:22 has
-rwxr-xr-- 1 user user 18 2010-07-31 09:24 template
-rw-r--r-- 1 user user 18 2010-07-31 09:22 wants
$ cat template
contents of wants
$ rm wants
$ mv template wants
$ ls -l has wants
-rwxr-xr-- 1 user user 16 2010-07-31 09:22 has
-rwxr-xr-- 1 user user 18 2010-07-31 09:24 wants
$ cat has
contents of has
$ cat wants
contents of wants