2011-04-20 10:24:10 +0000 2011-04-20 10:24:10 +0000
79
79

Spostare file e cartelle in modo ricorsivo su Linux

Considerare:

ls -al ../public-back
drwxrwxr-x 4 apache apache 4096 Apr 19 03:32 templates

ls -al ../public-back/templates

drwxrwxr-x 2 apache apache 4096 Apr 19 03:33 content
drwxrwxr-x 2 apache apache 20480 Apr 20 06:14 images
drwxrwxr-x 2 apache apache 4096 Apr 19 03:35 video

ls -al /public

drwxrwxr-x 4 apache apache 4096 Apr 20 09:49 templates

ls -al /public/templates

drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 content
drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 images
drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 video

Come si sposta il contenuto di /public-back/templates in modo ricorsivo con i permessi in /public/templates?

Risposte (5)

97
97
97
2011-04-20 14:10:36 +0000

A meno che non stia fraintendendo la domanda, questo funzionerebbe:

mv /public-back/templates/* /public/templates
``` &001 


Inoltre, a meno che non si disponga di una lista enorme di file, l'aggiunta di `-i` chiederà prima di sovrascrivere qualsiasi cosa, il che aggiunge un po' di sicurezza quando si usano caratteri jolly come `*`.
10
10
10
2011-04-20 14:24:07 +0000

La pagina uomo per i cp dichiara:

-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively

Try;

cp -rp /public-back/templates/* /public/templates/
5
5
5
2016-02-17 07:43:21 +0000

Quando si spostano oggetti dalla chiavetta al sistema OSMC, ho trovato molto utile quanto segue:

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;
``` ```
find finds all files and folders in the destination path.

/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.

-name '*' filters on names. If you do not escape or quote this then 
          the shell will expand it before find sees it.

-exec Executes a command, in our case mv

-v Verbose, so you can see what's happening (optional)

{} is replaced by the name of the found object.

Spiegazione su come funziona di seguito.

BTW, Non dimenticare di aggiungere una barra di ritorno prima di qualsiasi spazio nei nomi delle directory di origine o di destinazione (vedi sopra).

&001 &001

Effettivamente, si stanno trovando tutti i file e tutte le cartelle e li si sta spostando uno per uno (o se una directory viene trovata per prima, si sta spostando quella directory e il contenuto in essa contenuto). Questo avvia un nuovo processo per ogni spostamento ed è molto inefficiente. Usatelo solo quando i comandi regolari falliscono.

2
2
2
2017-09-06 07:05:14 +0000
cp -a --link ../public-back/* /public/. && rm -rf ../public-back

Quindi create dei collegamenti rigidi nella directory di destinazione e rimuovete la directory di origine. ‘mv’ semplicemente non funzionerà nel vostro caso, e in generale funziona solo quando la directory di origine e il destino non hanno sottotrei comuni.

Notare che sto dando per scontato che la parola ‘move’ nella domanda significhi che la directory di origine dovrebbe essere sparita dopo l'operazione.

2
2
2
2015-10-20 15:24:37 +0000

Il camper non sembra fare questo. Ma si può usare questo piccolo trucco, funziona come un incantesimo:

tar cf - . |(cd /targetdir; tar xvf -)

e conserva i permessi e tutto il resto.

Nota: nessuna di queste cose ha funzionato per me, ecco perché questo workaround.