Gibt es eine einfache Möglichkeit, alle versteckten Dateien in einem Verzeichnis rekursiv in ein anderes Verzeichnis zu kopieren? Ich möchte nur alle Einstellungsdateien in einem Ausgangsverzeichnis sichern, nicht die normalen Dateien. Ich habe es versucht:
cp -R .* directory
es erkennt .
und ..
kopiert aber auch alle nicht versteckten Dateien rekursiv. Gibt es eine Möglichkeit, cp zu ignorieren .
und zu bekommen ..
?
-r
und-R
?Antworten:
Mein Liebling, dirs im Allgemeinen zu bewegen, war:
Der Befehl tariert das aktuelle Verzeichnis auf stdout und leitet es dann an eine Subshell weiter, die zuerst zum Zielverzeichnis wechselt, bevor der Befehl stdin entpackt wird. Einfach, direkt, erweiterbar - Überlegen Sie, was passiert, wenn Sie das () durch ein SSH auf einem anderen Computer ersetzen. Oder zur Beantwortung Ihrer Frage:
quelle
cd /dest/dir && tar xvf -
. Das&&
hindert Sie daran, über das Quellverzeichnis zu blättern, wenn Sie einen Tippfehler im Ziel haben. 2) Sie benötigen nur das tar-v
Flag für einen der tar-Befehle (oder keinen).(cd /src/dir && tar cf - .) | tar xvf -
Fast jedes Mal kann dies einfach gelöst werden mit:
Es ist ziemlich ungewöhnlich, eine versteckte Datei zu haben, die nicht mit einem dieser Zeichen beginnt.
Andere Musterübereinstimmungen sind verfügbar (
.??*
,.[^.]*
) - siehe Kommentarequelle
Du könntest es gebrauchen
rsync
.Dadurch wird der Inhalt des aktuellen Verzeichnisses kopiert (einschließlich der Punktedateien, jedoch nicht einschließlich
..
).quelle
.git
dirs zu kopieren . Das Hinzufügen von -C bewirktrsync -aC ./ /some/other/directory/
Ich flehe Sie an, Schritt weg von der einfachen Shell-Erweiterung auf der
cp
Kommandozeile - die Shell-Erweiterung hat alle möglichen "interessanten" Eckfälle (unerwünschte Rekursion durch. Und., Leerzeichen, nicht druckbare Inhalte, Hardlinks, symbolische Links und usw.) Verwenden Siefind
stattdessen (es ist imfindutils
Paket enthalten, falls Sie es nicht installiert haben - was seltsam wäre, alle Distributionen installieren es standardmäßig):Schritt für Schritt Erklärung:
Im Klartext
find
sagt diese Befehlszeile also Folgendes:quelle
Ich habe immer. ?? * verwendet, um versteckte Dateien zu finden, ohne "." und "..". Vielleicht fehlt ".a" oder so, aber ich habe nie eine davon.
quelle
Viel bessere Antworten hier; /superuser/61611/how-to-copy-with-cp-to-include-hidden-files-and-hidden-directories-and-their-con
Es beschreibt beispielsweise die Verwendung von shopt für eine native Bash-Lösung
quelle