Wie kann ich absolut alle Dateien und Verzeichnisse in einem Verzeichnis cp -r
kopieren
Bedarf:
- Schließen Sie versteckte Dateien und versteckte Verzeichnisse ein.
- Seien Sie ein einziger Befehl mit einem Flag, um das Obige einzuschließen.
- Sie müssen sich überhaupt nicht auf Pattern Matching verlassen.
Mein hässlicher, aber funktionierender Hack ist:
cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user
Wie kann ich das alles in einem Befehl ohne den Mustervergleich tun? Welche Flagge muss ich verwenden?
Antworten:
Geben Sie die Dateien nicht an:
(Beachten Sie, dass dies noch
/home/user
nicht existieren darf, sonst wird es erstellt/home/user/skel
.)quelle
/home/user/skel
es existiert?-T
(kein Ziel) für die ordnungsgemäße Verwendung. (-rT
für rekursive)Nehmen wir an, Sie haben den neuen Ordner erstellt (oder möchten einen erstellen) und möchten die Dateien in diesen Ordner kopieren, nachdem der Ordner erstellt wurde
Dadurch werden alle Dateien / Ordner rekursiv von
/etc/skel
in in den bereits vorhandenen Ordner kopiert , der in der ersten Zeile erstellt wurde.quelle
.
, muss er für dieses Verhalten ein bereits vorhandenes Verzeichnis erstellen, sodass dieser Schritt nur übersprungen wird..
, um zu ändern, dass Sie denshopt -s dotglob
Befehl verwenden müssen, bevor Sie diese Dateien einschließen können. Daher*
werden Sie standardmäßig aufgefordert, alle Dateien rekursiv aus diesem Verzeichnis zu kopieren, das mithilfe von*
(das standardmäßig keine ausgeblendeten Dateien enthält) erweitert werden kann. Während Sie am anderen Ende mit.
cp arbeiten, kopieren Sie rekursiv alles aus "diesem Verzeichnis".Verwenden Sie dazu die
-T (--no-target-directory)
Option und kopieren Sie die Ordner rekursiv (ohne abschließende Schrägstriche, Sternchen usw.).Dadurch wird der Inhalt von
/etc/skel
nach/home/user
(einschließlich versteckter Dateien) kopiert und der Ordner erstellt,/home/user
falls er nicht vorhanden ist. Die-T
Option verhindert jedoch, dass der Inhalt/etc/skel
in einen neuen Ordner kopiert wird,/home/user/skel
falls der Ordner/home/user
vorhanden ist.quelle
bash
selbst hat eine gute lösung, es hat eineshell option
, du kannstcp
,mv
und so weiter .:und
Die obige Lösung entspricht dem Standard von
bash
HINWEIS:
quelle
setopt
für zsh, falls sich jemand fragt.Verwenden Sie rsync:
rsync -rtv source_folder/ destination_folder/
quelle
rsync
ist gut, aber eine andere Wahl:Aus der Haupthilfe:
quelle
Wenn Ihr Quell- und Zielverzeichnis denselben Namen haben, können Sie einfach Folgendes eingeben, auch wenn das Zielverzeichnis vorhanden ist:
Dadurch wird das Verzeichnis / etc / skel nach / home / kopiert, einschließlich versteckter Dateien und Verzeichnisse.
Schließlich können Sie das Verzeichnis kopieren und in einer einzigen Zeile umbenennen:
quelle
cp -r /etc/skel /home/user
zum Umbenennenskel
inuser
...Sie könnten rsync verwenden.
Sie können sogar über ssh kopieren
Es gibt verschiedene Flags, die Sie verwenden können: -a, --archive # archive (-rlptgoD)
Rsync-Manpage
quelle
Der einfachste Weg ist:
Der Ausdruck
{.,}*
enthält alle Dateien und Verzeichnisse (auch beginnend mit einem Punkt).Wenn Sie den obigen Ausdruck nicht verwenden möchten, können Sie die
cp
Eigenschaft verwenden, mit der Sie mehrere Quellen für einen Zielordner angeben können:quelle
..anything
oder...anything
usw. vermissen . - stackoverflow.com/a/31438355/2351568 enthält die korrekte reguläre Ausdrucksweise für dieses Problem. || aber trotzdem mitshopt -s dotglob
ist immer noch die bessere lösung!.
und berücksichtigt..
(was dem aktuellen und seinem enthaltenen Ordner entspricht). || Aber die Antwort im Link erklärt es weiter und bietet eine Lösung.Beachten Sie, dass es einen Befehlszeilentrick gibt (funktioniert mindestens in sh , bash und ksh ): Fügen Sie dem Verzeichnis from einen Schrägstrich hinzu. Dadurch wird der Inhalt des " from" -Verzeichnisses in das " to" -Verzeichnis gegossen (ironischerweise hatte ich diesen Trick zum ersten Mal bei Verwendung von rsync kennengelernt ).
Beispiel:
quelle
Ich bin hierher gekommen, um nach einer Lösung für das gleiche Problem zu suchen. Dann habe ich festgestellt, dass es einfach ist, sie zu finden. Der Vorteil ist nicht abhängig von der Shell oder speziellen Dienstprogrammen, die möglicherweise nicht installiert sind.
Ich habe es mit einem abschließenden Schrägstrich versucht, aber das hat bei mir nicht funktioniert.
quelle
Meine Lösung für dieses Problem, wenn ich alle Dateien (einschließlich
.
Dateien) in ein Zielverzeichnis kopieren muss, in dem die Berechtigungen erhalten bleiben, lautet: (Überschreiben, falls bereits vorhanden)yes
ist für das automatische Überschreiben von Zieldateien,r
rekursiv,v
ausführlich,p
Berechtigungen behalten.Beachten Sie, dass der Quellpfad nicht mit einem endet
/
(daher werden alle Dateien / Verzeichnisse und .dateien kopiert).Das Zielverzeichnis endet damit
/
, dass wir den Inhalt des Quellordners zum Ziel als Ganzes verschieben.quelle
Ich habe gesehen, dass cp versteckte Dateien nicht immer kopiert. Wenn Sie einen Befehl möchten, der in allen Linux- / Unix-Dialekten funktioniert, sollten Sie versuchen, Folgendes zu verwenden:
quelle
Ab K3b 2.0.3 wird beim Hinzufügen des Verzeichnisses zum Projekt ein Fragenfeld angezeigt, in dem Sie gefragt werden, ob Sie versteckte Dateien einbeziehen möchten. Außerdem wird eine Frage zum Einbeziehen angezeigt links. Gutes Zeug!
quelle