Talvez seja mais fácil abusar de rsync
para obter o que você está procurando e potencialmente fazer toda a tarefa, embora você tenha que suprimir seu desejo de atualizar o arquivo - essa é a rotina do rsync:
-
rsync --existing -iprvn a/ b
As opções são as seguintes:
--existing skip creating new files on receiver
-p, --perms preserve permissions
-i, --itemize-changes output a change-summary for all updates
-r, --recursive recurse into directories
-v, --verbose increase verbosity
-n, --dry-run perform a trial run with no changes made
Agora vamos criar um teste. Aqui temos dois diretórios, ambos possuem um arquivo que o outro não possui; b
também tem a+x
em 1
.
$ ls -lah a/ b/
a/:
total 8.0K
drwxrwxr-x 2 ecarroll ecarroll 4.0K Apr 5 16:38 .
drwxr-xr-x 71 ecarroll ecarroll 4.0K Apr 5 16:38 ..
-rw-rw-r-- 1 ecarroll ecarroll 0 Apr 5 16:38 1
-rw-rw-r-- 1 ecarroll ecarroll 0 Apr 5 16:38 2
-rw-rw-r-- 1 ecarroll ecarroll 0 Apr 5 16:38 5
b/:
total 8.0K
drwxrwxr-x 2 ecarroll ecarroll 4.0K Apr 5 16:52 .
drwxr-xr-x 71 ecarroll ecarroll 4.0K Apr 5 16:38 ..
-rwxrwxr-x 1 ecarroll ecarroll 0 Apr 5 16:52 1
-rw-rw-r-- 1 ecarroll ecarroll 0 Apr 5 16:52 5
-rw-rw-r-- 1 ecarroll ecarroll 0 Apr 5 16:38 7
Agora vamos executar um rsync.
$ rsync --existing -icprvn a/ b
sending incremental file list
.f...p..... 1
sent 97 bytes received 15 bytes 224.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
-
f
significa que é um arquivo. -
p
significa que as permissões estão desativadas. -
1
é apenas o nome do meu arquivo de exemplo.