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

Verplaats bestanden en mappen recursief op Linux

Overweeg:

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

Hoe verplaats ik de inhoud van /public-back/templates recursief met rechten naar /public/templates?

Antwoorden (5)

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

Tenzij ik de vraag verkeerd begrijp, zou dit werken:

mv /public-back/templates/* /public/templates

Ook, tenzij je een enorme lijst met bestanden hebt, zal het toevoegen van -i vragen voordat het iets overschrijft, wat enige veiligheid toevoegt bij het gebruik van wildcards zoals *.

10
10
10
2011-04-20 14:24:07 +0000

Op de man pagina voor cp staat:

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

Probeer;

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

Bij het verplaatsen van items van mijn duimschijf naar mijn OSMC systeem, heb ik het volgende zeer nuttig gevonden:

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;

Uitleg over hoe het werkt hieronder.

BTW, Vergeet niet een backslash toe te voegen voor eventuele spaties in de naam van de bron- of doelmap (zie boven).

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.

In feite vind je alle bestanden en alle mappen en verplaats je ze één voor één (of als een map eerst wordt gevonden, verplaats je die map en de inhoud ervan). Dit begint een nieuw proces voor elke verhuizing en is zeer inefficiënt. Gebruik dit alleen als de reguliere commando’s mislukken.

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

Maak dus harde links in de doelmap en verwijder de bron dir. ‘mv’ werkt in jouw geval gewoon niet, en werkt in het algemeen alleen als bron dir en dest geen gemeenschappelijke subtreams hebben.

Merk op dat ik ervan uitga dat het woord ‘move’ in de vraag betekent dat de bron dir na de bewerking weg moet zijn.

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

mv lijkt dit niet te doen. Maar je kunt dit trucje wel gebruiken, het werkt als een charme:

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

en behoudt rechten en alles.

Noot: geen van bovenstaande werkte voor mij, daarom is deze workaround.