Copiare due cartelle in Linux con rsync

Se si vogliono copiare due cartelle in Linux si può usare rsync da linea di comando.

Preparo l’ambiente di test creando le seguenti cartelle e file:

cartella “/share/source”
cartella “/share/destination”
cartella “/share/source/folder 1”
cartella “/share/source/folder 2”
file “/share/source/folder 1/file 1”
file “/share/source/folder 2/file 2”

Voglio copiare il contenuto della cartella “source” nella cartella “destination”. Quindi lancio:

[/share] # rsync -avc "source/" "destination"

Come mi aspettavo, ecco il risultato:

sending incremental file list ./ folder 1/ folder 1/file 1.txt folder 2/ folder 2/file 2.txt sent 253 bytes received 61 bytes 628.00 bytes/sec total size is 12 speedup is 0.04

Verifico il risultato:

[/share] # ls -lR destination/ destination/: drwxrwx--- 2 admin administ 4096 Dec 2 17:24 folder 1/ drwxrwx--- 2 admin administ 4096 Dec 2 17:24 folder 2/ destination/folder 1: -rwxrwx--- 1 admin administ 6 Dec 2 17:24 file 1.txt* destination/folder 2: -rwxrwx--- 1 admin administ 6 Dec 2 17:24 file 2.txt*

Con un bel man rsync si possono vedere le opzioni che ho usato: https://linux.die.net/man/1/rsync

-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) -v, --verbose increase verbosity -c, --checksum skip based on checksum, not mod-time & size

Qualche nota:

  • Nel comando del confronto, la slash “/” di “source/” vuol dire “il contenuto di source”.
  • L’opzione “-a” equivale a “-rlptgoD”. Incollo qui sotto le spiegazioni:
-r, --recursive recurse into directories -l, --links copy symlinks as symlinks -p, --perms preserve permissions -t, --times preserve modification times -g, --group preserve group -o, --owner preserve owner (super-user only) -D same as --devices --specials --devices preserve device files (super-user only) --specials preserve special files

Confrontare due cartelle in Linux con rsync

Se si vogliono confrontare due cartelle in Linux si può usare rsync da linea di comando.

Preparo l’ambiente di test creando le seguenti cartelle e file:

cartella “/share/source”
cartella “/share/destination”
cartella “/share/source/folder 1”
cartella “/share/source/folder 2”
file “/share/source/folder 1/file 1”
file “/share/source/folder 2/file 2”
cartella “/share/destination/folder 1”
file “/share/destination/folder 1/file 1”

Voglio confrontare la cartella “source” con la cartella “destination”. Quindi lancio:

[/share] # rsync -avnc "source/" "destination"

Come mi aspettavo, ecco il risultato:

sending incremental file list ./ folder 2/ folder 2/file 2.txt sent 155 bytes received 23 bytes 356.00 bytes/sec total size is 12 speedup is 0.07 (DRY RUN)

la cartella “folder 2” e il file “folder 2/file 2.txt”  sono quelli che mancano nella cartella “destination”.

Con un bel man rsync si possono vedere le opzioni che ho usato: https://linux.die.net/man/1/rsync

-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) -v, --verbose increase verbosity -n, --dry-run perform a trial run with no changes made -c, --checksum skip based on checksum, not mod-time & size

Qualche nota:

  • Nel comando del confronto, la slash “/” di “source/” vuol dire “il contenuto di source”.
  • L’opzione “-a” equivale a “-rlptgoD”. Incollo qui sotto le spiegazioni:
-r, --recursive recurse into directories -l, --links copy symlinks as symlinks -p, --perms preserve permissions -t, --times preserve modification times -g, --group preserve group -o, --owner preserve owner (super-user only) -D same as --devices --specials --devices preserve device files (super-user only) --specials preserve special files
  • L’opzione “-n” è indispensabile per il confronto!!

Unable to create directory wp-content/uploads/… Is its parent directory writable by the server?

Mentre stavo installando un tema di WordPress:

dopo aver premuto su “Install Now”, è apparso l’errore:

Unable to create directory wp-content/uploads/2013/01. Is its parent directory writable by the server?

Per risolvere il problema ho aperto una shell del server [1] su cui stavo facendo i test, mi sono posizionato nella directory di installazione di wordpress e ho dato i permessi corretti alla cartella wp-content:

$ cd /home/utente/public_html/wordpress-test/ $ sudo chown www-data:www-data wp-content

Poi ho rilanciato l’installazione del tema e non ha dato più errori [2].

Note

[1] Server usato: Ubuntu
[2] Attenzione: in altre distribuzioni di Linux (probabilmente quelle NON-Debian-like) può darsi che l’utente di Apache2 non sia “www-data”, ma un altro. Verificare qual è e rilanciare il relativo comando.
In rete ho visto altre soluzioni secondo me molto pericolose come dare alla cartella “wp-content” permessi rwx-rwx-rwx (chmod 777). Ovviamente lo sconsiglio.