Verschieben Sie Dateien und Ordner rekursiv unter Linux

Prüfen:

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

Wie verschiebe ich den Inhalt von /public-back/templates rekursiv mit Berechtigungen in /public/templates?

Author: Peter Mortensen, 2011-04-20

7 answers

Wenn ich die Frage nicht falsch verstehe, würde dies funktionieren:

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

Wenn Sie keine große Liste von Dateien haben, fragt das Hinzufügen von -i, bevor es etwas überschreibt, was bei Verwendung von Platzhaltern wie * Sicherheit bietet.

 119
Author: DQdlM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-01-14 21:20:21

Die Manpage für cp besagt:

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

, Versuchen;

cp -rp /public-back/templates/* /public/templates/
 17
Author: Himalay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-04-20 14:24:07

Beim Verschieben von Elementen von meinem USB-Stick auf mein OSMC-System habe ich Folgendes sehr nützlich gefunden:

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

Erklärung, wie es unten funktioniert.

Vergessen Sie übrigens nicht, einen Backslash vor Leerzeichen in den Quell-oder Zielverzeichnisnamen hinzuzufügen (siehe oben).
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.

Effektiv finden Sie alle Dateien und Ordner und verschieben sie nacheinander (oder wenn zuerst ein Verzeichnis gefunden wird, verschieben Sie dieses Verzeichnis und den Inhalt darin). Dies startet einen neuen Prozess für jede Bewegung und ist sehr ineffizient. Verwenden Sie dies nur, wenn die regulären Befehle fehlschlagen.

 6
Author: Pi Hard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-02-18 22:19:48
cp -a --link ../public-back/* /public/.  &&  rm -rf ../public-back

Erstellen Sie also harte Links im Zielverzeichnis und entfernen Sie das Quellverzeichnis. 'mv' funktioniert in Ihrem Fall einfach nicht und funktioniert im Allgemeinen nur, wenn Quellverzeichnis und dest keine gemeinsamen Teilbäume haben.

Beachten Sie, dass ich davon ausgehe, dass das Wort "Verschieben" in der Frage bedeutet, dass das Quellverzeichnis nach der Operation verschwunden sein sollte.

 3
Author: Boudewijn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-09-06 07:16:13

Mv scheint das nicht zu tun. Aber Sie können diesen kleinen Trick verwenden, funktioniert wie ein Zauber:

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

Und bewahrt Berechtigungen und alle.

Hinweis: Keines der oben genannten hat für mich funktioniert, deshalb ist diese Problemumgehung.

 2
Author: svye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-10-20 15:24:37

Es ist möglich, sich mit rsync zu bewegen, anstatt mit --remove-source-files zu kopieren. Dadurch bleiben Eigenschaften wie Berechtigungen und geänderte Daten erhalten. Es hat den zusätzlichen Vorteil, zu überprüfen, ob Dateien nicht in das Zielverzeichnis verschoben werden müssen (dh ob dort bereits eine neuere Datei mit demselben Namen vorhanden ist).

rsync -arctuxz --remove-source-files /public-back/templates/* /public/templates/

Natürlich können Sie auch die Dateien kopieren und das Originalverzeichnis entfernen.

mkdir -p /public/templates
rsync -arctuxz --remove-source-files /public-back/templates/* /public/templates/
rm -rfi /public-back/templates/

Dies sind meine empfohlenen Parameter für rsync aber es gibt andere Argumente für die Erhaltung verschiedener Eigenschaften oder Umgang mit Links und Komprimierung / Verschlüsselung von großen Dateien. Dieser Befehl unterstützt auch das Kopieren in entfernte Dateisysteme über SSH-Tunnel.

 1
Author: Tom Kelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-28 02:56:46

Wie oben erwähnt, ist mv auf demselben Dateisystem schneller als cp. Im Folgenden werden beispielsweise Zeitstempel und Eigentümer beibehalten und Verzeichnisse und Dateien einschließlich versteckter Dateien und Verzeichnisse rekursiv verschoben.

Anfangsbedingungen:

  • Hinweis der Besitz von dir02/* ist root:victoria
[victoria@victoria test]$ tree -La 5 -F
.
└── hourly.0/
    ├── .dir01/
    ├── dir01/
    │   ├── .dir02/
    │   ├── dir02/
    │   │   ├── .dir03/
    │   │   ├── dir03/
    │   │   │   ├── .file03
    │   │   │   └── file03
    │   │   ├── .file02
    │   │   └── file02
    │   ├── .file01
    │   └── file01
    ├── .file00
    └── file00

7 directories, 8 files

[victoria@victoria test]$ ls -laR
.:
total 12
drwxr-xr-x 3 victoria victoria 4096 Apr 27 10:04 .
drwxrwxr-x 4 victoria victoria 4096 Apr 27 09:19 ..
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 hourly.0

./hourly.0:
total 16
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 .
drwxr-xr-x 3 victoria victoria 4096 Apr 27 10:04 ..
drwxr-xr-x 2 victoria victoria 4096 Apr 27 09:44 .dir01
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 dir01
-rw-r--r-- 1 victoria victoria    0 Apr 27 09:17 .file00
-rw-r--r-- 1 victoria victoria    0 Apr 27 09:17 file00

./hourly.0/.dir01:
total 8
drwxr-xr-x 2 victoria victoria 4096 Apr 27 09:44 .
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 ..

./hourly.0/dir01:
total 16
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 .
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 ..
drwxr-xr-x 2 victoria victoria 4096 Apr 27 09:44 .dir02
drwxr-xr-x 4 root     victoria 4096 Apr 27 09:45 dir02
-rw-r--r-- 1 victoria victoria    0 Apr 27 09:17 .file01
-rw-r--r-- 1 victoria victoria    0 Apr 27 09:17 file01

./hourly.0/dir01/.dir02:
total 8
drwxr-xr-x 2 victoria victoria 4096 Apr 27 09:44 .
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 ..

./hourly.0/dir01/dir02:
total 16
drwxr-xr-x 4 root     victoria 4096 Apr 27 09:45 .
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 ..
drwxr-xr-x 2 root     victoria 4096 Apr 27 09:44 .dir03
drwxr-xr-x 2 root     victoria 4096 Apr 27 09:45 dir03
-rw-r--r-- 1 root     victoria    0 Apr 27 09:17 .file02
-rw-r--r-- 1 root     victoria    0 Apr 27 09:17 file02

./hourly.0/dir01/dir02/.dir03:
total 8
drwxr-xr-x 2 root victoria 4096 Apr 27 09:44 .
drwxr-xr-x 4 root victoria 4096 Apr 27 09:45 ..

./hourly.0/dir01/dir02/dir03:
total 8
drwxr-xr-x 2 root victoria 4096 Apr 27 09:45 .
drwxr-xr-x 4 root victoria 4096 Apr 27 09:45 ..
-rw-r--r-- 1 root victoria    0 Apr 27 09:17 .file03
-rw-r--r-- 1 root victoria    0 Apr 27 09:17 file03

Verschieben Sie diese Dateien, Verzeichnisse:

Dies scheint zu erhalten:

  • Zeitstempel
  • verschiebt Dateien rekursiv, Verzeichnisse (einschließlich versteckter Dateien, Verzeichnisse)
  • bewahrt Besitztümer
[victoria@victoria test]$ mv hourly.0/ hourly.1

Nach dem Umzug:

[victoria@victoria test]$ tree -La 5 -F
.
└── hourly.1/
    ├── .dir01/
    ├── dir01/
    │   ├── .dir02/
    │   ├── dir02/
    │   │   ├── .dir03/
    │   │   ├── dir03/
    │   │   │   ├── .file03
    │   │   │   └── file03
    │   │   ├── .file02
    │   │   └── file02
    │   ├── .file01
    │   └── file01
    ├── .file00
    └── file00

7 directories, 8 files

[victoria@victoria test]$ ls -laR
.:
total 12
drwxr-xr-x 3 victoria victoria 4096 Apr 27 10:05 .
drwxrwxr-x 4 victoria victoria 4096 Apr 27 09:19 ..
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 hourly.1

./hourly.1:
total 16
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 .
drwxr-xr-x 3 victoria victoria 4096 Apr 27 10:05 ..
drwxr-xr-x 2 victoria victoria 4096 Apr 27 09:44 .dir01
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 dir01
-rw-r--r-- 1 victoria victoria    0 Apr 27 09:17 .file00
-rw-r--r-- 1 victoria victoria    0 Apr 27 09:17 file00

./hourly.1/.dir01:
total 8
drwxr-xr-x 2 victoria victoria 4096 Apr 27 09:44 .
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 ..

./hourly.1/dir01:
total 16
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 .
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 ..
drwxr-xr-x 2 victoria victoria 4096 Apr 27 09:44 .dir02
drwxr-xr-x 4 root     victoria 4096 Apr 27 09:45 dir02
-rw-r--r-- 1 victoria victoria    0 Apr 27 09:17 .file01
-rw-r--r-- 1 victoria victoria    0 Apr 27 09:17 file01

./hourly.1/dir01/.dir02:
total 8
drwxr-xr-x 2 victoria victoria 4096 Apr 27 09:44 .
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 ..

./hourly.1/dir01/dir02:
total 16
drwxr-xr-x 4 root     victoria 4096 Apr 27 09:45 .
drwxr-xr-x 4 victoria victoria 4096 Apr 27 09:45 ..
drwxr-xr-x 2 root     victoria 4096 Apr 27 09:44 .dir03
drwxr-xr-x 2 root     victoria 4096 Apr 27 09:45 dir03
-rw-r--r-- 1 root     victoria    0 Apr 27 09:17 .file02
-rw-r--r-- 1 root     victoria    0 Apr 27 09:17 file02

./hourly.1/dir01/dir02/.dir03:
total 8
drwxr-xr-x 2 root victoria 4096 Apr 27 09:44 .
drwxr-xr-x 4 root victoria 4096 Apr 27 09:45 ..

./hourly.1/dir01/dir02/dir03:
total 8
drwxr-xr-x 2 root victoria 4096 Apr 27 09:45 .
drwxr-xr-x 4 root victoria 4096 Apr 27 09:45 ..
-rw-r--r-- 1 root victoria    0 Apr 27 09:17 .file03
-rw-r--r-- 1 root victoria    0 Apr 27 09:17 file03

[victoria@victoria test]$ 
 0
Author: Victoria Stuart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-04-27 17:34:12