Wie vermeide ich das Kopieren von „..“ bei der Verwendung des cp-Befehls im Terminal?

Wie vermeide ich das Kopieren von „..“ bei der Verwendung des cp-Befehls im Terminal?

Ich verwende CentOS7 und wenn ich den Befehl

cp /root/test/.* /root/test1

Es werden auch ..alle Dateien und Ordner im übergeordneten Verzeichnis der Quelle kopiert.

Wie vermeidet man das Kopieren .und ..?

Antwort1

In der Frage wird nicht explizit angegeben, ob Sie kopieren möchtennurversteckte Namen oder ob Sie alle Dateien kopieren möchten. Ebenso, ob Sie den Inhalt aller Unterverzeichnisse kopieren möchten. Ich gehe davon aus, dass Sie kopieren möchtennurDer versteckte Name ist das aktuelle Verzeichnis (weil Sie das anscheinend mit Ihrem Befehl erreichen möchten).

Ihr Befehl würde nicht alle Dateien im übergeordneten Verzeichnis kopieren, es sei denn, Sie verwenden auch die -ROption mit cp(oder -rmit GNU cp), um eine rekursive Kopie durchzuführen. Ohne die -ROption cpwürde sich beschweren, dass es sich bei .und ..um Verzeichnisse handelt, und würde sie jedoch nicht kopieren.

Setzen Sie in der bashShell die GLOBIGNOREShell-Variable auf die :durch - getrennte Liste von Namen, auf die die Shell keine Dateinamen-Globbing-Muster erweitern soll.

GLOBIGNORE='.:..'

dann kopieren Sie Ihre Dateien,

cp /root/test/.* /root/test1

Um dies GLOBIGNOREvorübergehend, nur für den Kopiervorgang, festzulegen, verwenden Sie eine Unter-Shell:

( GLOBIGNORE='.:..'; cp /root/test/.* /root/test1 )

Antwort2

Die Standardsprache zum Globbing aller Namen, die mit einem Punkt beginnen, außer .und ..ist .??*. Ihr Befehl wäre also

cp /root/test/.??* /root/test1

verwandte Informationen