PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verzeichnisse kopieren



buffy1860
31.08.10, 09:50
Hi,
ich möchte gern ein verzeichnis "db" nach "db_test" kopieren soweit kein problem , beim zweiten mal besteht aber das verzeichnis "db_test" schon und mein ursprungs-verzeichnis wird in des verzeichnis "db_test" kopiert.
gibts hier irgendeinen option den man dem copy befehl mitgeben muss damit er dies nicht macht?

Gruß
Buffy

Wene
31.08.10, 10:06
Wenn Du uns jetzt noch den exakten Befehl welchen Du verwendet hast verraten kannst ist dies sicher kein Problem.

buffy1860
31.08.10, 10:09
cp -r db/ db_test

marce
31.08.10, 10:11
wenn Du cp verwenden willst musst Du entweder die Inhalte von db nach db_test kopieren oder halt vorher db_test löschen. Wenn Du auf ein anderes Basis-VZ ausweichen kannst evtl. auch mit --parents oder --target-directory arbeiten...

Alternativ z.B. mit rsync kopieren.

Wene
31.08.10, 11:27
cp -r db/ db_test

ohne es geprüft zu haben, probier mal


cp -r db/* db_test

marce
31.08.10, 11:30
geht, würde aber keine versteckten Dateien kopieren - und er müsste vor dem ersten kopieren das Zielverzeichnis erstellen.

Wene
01.09.10, 22:37
geht, würde aber keine versteckten Dateien kopieren - und er müsste vor dem ersten kopieren das Zielverzeichnis erstellen.

Habe gerade nochmals geschaut. Zumindest mit "cp -a" - so mache ich im Moment meine Backups - werden die versteckten Dateien mit kopiert. Das Ziel erstelle ich jeweils vorher.

oziris
02.09.10, 20:17
Nein, der "Glob" "*" "matcht" nicht auf Dateien mit "." am Anfang! (Er wird von der Shell und nicht von cp interpretiert und aufgelöst.)
Mit "cp -r db/* db/.* db_test" werden auch versteckte, direkte Nachfahren von db (mit "." vorn) kopiert.

Die ganze Sache mit den Globs hat aber einen dicken Haken: Sind auf der ersten Ebene (die, auf die das "*" passt), zu viele Dateien/Verzeichnisse oder ist die Gesamtlänge ihrer Namen zu lang, dann gibt es einen Fehler, weil es Maximalbegrenzungen für Parameterlisten von Befehlen gibt. (Bevor die Parameter an cp gegeben werden, wird z.B. aus "db/*" -> "db/datei1 db/datei2 db/datei3 ...". (Kann man z.B. leicht mit "echo *" testen.))

Wene
03.09.10, 21:52
Nein, der "Glob" "*" "matcht" nicht auf Dateien mit "." am Anfang!

Interessante Aussage. Klingt auch soweit einleuchtend. Allerdings funktioniert es in der Praxis tatsächlich, hab nämlich als ich das schrieb gerade auf diese Art ein kleines Backup von "~" gemacht wobei auch die Dateien und Ordner mit "." kopiert worden sind. Wie gesagt zumindest mit "cp -a" gehts.

oziris
03.09.10, 23:33
Dann hast Du kein "*" benutzt oder Du benutzt eine spezielle oder speziell konfigurierte Shell, die mit "*" auch ".*" match-t, was aber gewöhnlich nicht der Fall ist (z.B. bash voreingestellt auf Debian, CentOS und Gentoo). Vielleicht hat das etwas mit "match-hidden-files" in der /etc/inputrc (readline), der "dotglob"-Einstellung oder der Umgebungsvariable GLOBIGNORE zu tun, aber ich bin mir da nicht sicher.
[...]When a pattern is used for pathname expansion, the character ``.'' at the start
of a name or immediately following a slash must be matched explicitly, unless the shell option dotglob is set. When matching a pathname, the slash character must always be matched explic-
itly. In other cases, the ``.'' character is not treated specially. See the description of shopt below under SHELL BUILTIN COMMANDS for a description of the nocaseglob, nullglob, fail-
glob, and dotglob shell options.

The GLOBIGNORE shell variable may be used to restrict the set of file names matching a pattern. If GLOBIGNORE is set, each matching file name that also matches one of the patterns in GLO-
BIGNORE is removed from the list of matches. The file names ``.'' and ``..'' are always ignored when GLOBIGNORE is set and not null. However, setting GLOBIGNORE to a non-null value has
the effect of enabling the dotglob shell option, so all other file names beginning with a ``.'' will match. To get the old behavior of ignoring file names beginning with a ``.'', make
``.*'' one of the patterns in GLOBIGNORE. The dotglob option is disabled when GLOBIGNORE is unset.
Readline has variables that can be used to further customize its behavior. A variable may be set in the inputrc file with a statement of the form

set variable-name value
[...]

match-hidden-files (On)
This variable, when set to On, causes readline to match files whose names begin with a `.' (hidden files) when performing filename completion, unless the leading `.' is supplied by
the user in the filename to be completed.

marce
04.09.10, 10:22
Interessante Aussage. Klingt auch soweit einleuchtend. Allerdings funktioniert es in der Praxis tatsächlich, hab nämlich als ich das schrieb gerade auf diese Art ein kleines Backup von "~" gemacht wobei auch die Dateien und Ordner mit "." kopiert worden sind. Wie gesagt zumindest mit "cp -a" gehts.
poste doch mal den exakten Befehl, den Du verwendet hast...

Wene
04.09.10, 13:27
poste doch mal den exakten Befehl, den Du verwendet hast...

Das war konkret mit "Parted Magic" als root ein

cp -a /media/sda7/wene/* /media/sdb1/20100901/backup-home
während /dev/sda7 sonst als /home gemountet ist.