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 -R
Option mit cp
(oder -r
mit GNU cp
), um eine rekursive Kopie durchzuführen. Ohne die -R
Option cp
würde sich beschweren, dass es sich bei .
und ..
um Verzeichnisse handelt, und würde sie jedoch nicht kopieren.
Setzen Sie in der bash
Shell die GLOBIGNORE
Shell-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 GLOBIGNORE
vorü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