Wenn Sie mit kopieren, kopieren cp -a source/* target/
Sie die meisten Dateien und Verzeichnisse von source
nach target
. Insbesondere handelt es sich bei den ausgeschlossenen Elementen wahrscheinlich um Dateien, die mit einem Punkt ( .
) in der obersten Ebene von beginnen source
.
Betrachten Sie diese Dateien (oder Verzeichnisse) in source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will not be copied
Wenn Sie mit kopieren, cp -a source/. target/
kopieren Sie den gesamten Inhalt von source
, einschließlich aller Elemente, die mit einem Punkt ( .
) beginnen, nachtarget
Betrachten Sie diese Dateien (oder Verzeichnisse) in source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will be copied
Wenn Sie verwenden bash
, zsh
können Sie die verwenden dotglob
Option , die Bedeutung zu ändern , *
so dass sie beginnen , Dateien und Verzeichnisse mit einem Punkt enthält ( yash
hat auch eine dotglob
Option, aber es schließt dann .
und ..
. In glob Erweiterungen , die ihre Verwendbarkeit einschränkt Siehe auch FIGNORE='@(.|..)'
in ksh93
).
Interessanterweise cp -a source/. target/
wird garantiert nie die Komponente erstellt target/source
. (Auf der anderen Seite cp -a source target/
wird eines von zwei Dingen ausgeführt, je nachdem, ob es target
bereits vorhanden ist oder nicht . Weitere Informationen finden Sie unter Kopieren eines Ordners auf idempotente Weise mit cp .)
Wenn Sie mit löschen, löschen rm -rf source/*
Sie die Dateien und Verzeichnisse source
, die nicht mit einem Punkt ( .
) beginnen. Vorbehaltlich der dotglob
bereits erwähnten Einstellung. Das Verzeichnis source
selbst wird nicht gelöscht .
Wenn Sie versuchen, mit zu löschen, schlägt rm -rf source/.
dies fehl - wie andere bereits erklärt haben -, da POSIX das Löschen eines Pfads verbietet, dessen letzte Komponente .
oder ist ..
. Das nächste Äquivalent ist rm -rf source
, das das source
Verzeichnis und seinen gesamten Inhalt löscht, unabhängig davon, ob sie mit einem Punkt ( .
) beginnen oder nicht .
It's up to the command whether that trailing dot makes any sense
Ähm, der Punkt ist immer mit dem enthaltenen Verzeichnis selbst verknüpft,../foldersource/.
sollte sich also nicht von der Angabe unterscheiden./foldersource/
und ist in der Tat nur eine redundante Möglichkeit, dasselbe anzugeben. Kein Befehl versucht, einen Punkt oder einen Doppelpunkt zu "verstehen", da diese unter Linux / Unix-Dateisystemen Standard sind.rm
lehnt es einfach ab, das aktuelle Arbeitsverzeichnis zu entfernen, wiejimmij
in der Antwort angegeben. Beachten Sie außerdem, dass Sie./
in all Ihren Beispielen OP verwenden../
. Ein etwas großer Unterschied.