2016-05-06 14 views
2

Mac OS X Yosemite v.10.10.5.Fehler beim Kopieren von Verzeichnissen an der Befehlszeile mit cp

Ich versuche, den cp Befehl zu verwenden, um ein Git-Verzeichnis zu einem anderen zu kopieren.

Diese Befehlszeilenanweisung:
cp -r /path/to/dir/from/ /path/to/dir/to/ 
gibt diesen Fehler zurück:
cp: /path/to/dir/to/.git/objects/00/00ad2afeb304e18870d4509efc89fedcb3f128: Permission denied 

Dieser Fehler jeweils einmal für zurückgeführt wird (was ich glaube, aber nicht überprüft haben, ist) in das Verzeichnis jeder Datei .

Das erste Mal, als ich den Befehl ausführte, funktionierte es wie erwartet ohne Fehler. Aber, ohne irgendwelche Änderungen an irgendwelchen Dateien vorzunehmen, habe ich den zweiten (und nachfolgenden) Male, den ich den Befehl ausführte, den Fehler erhalten.

Was ist los? Und wie kann ich das beheben?

Edit:

Als Antwort auf eine Frage im Kommentar:

What does ls -l /path/to/dir/to/.git/objects/00/00ad2afeb304e18870d4509efc89fedcb3f128 show?

Die Antwort ist es zeigt:

-r--r--r-- 1 myusername staff 6151 May 6 00:45 /path/to/dir/to/.git/objects/00/00ad2afeb304e18870d4509efc89fedcb3f128 
+0

@anubhava: '-r - r - r-- 1 myusername Mitarbeiter 6151 Mai 6 00:45/Pfad/zu/dir/zu /. git/objects/00/00ad2afeb304e18870d4509efc89fedcb3f128' – Mowzer

+1

Wie Sie sehen können, hat diese Datei nur Leseberechtigungen, daher schlägt "cp" fehl, da sie ebenfalls Schreibrechte benötigt. – anubhava

+0

@anubhava: Zwei Fragen. 1. Wie füge ich Schreibberechtigungen hinzu? 2. Warum funktionierte der Befehl 'cp' beim ersten Mal? – Mowzer

Antwort

2

Der Grund, warum Sie Permission Denied erhalten, ist, weil Sie versuchen, eine Datei zu überschreiben, die bereits im Zielverzeichnis vorhanden ist, für das Lesezugriffsrechte festgelegt sind. Da es scheint, dass Sie versuchen, es zu überschreiben, können Sie das Zielverzeichnis einfach entfernen, wenn es vor dem Kopiervorgang existiert. Auch sollten Sie -R verwenden, nicht -r ...

Historic versions of the cp utility had a -r option. This implementation supports that option; however, its use is strongly discouraged, as it does not correctly copy special files, symbolic links, or fifo's.

einen Befehl wie diese verwenden sollte Ihr Problem beheben:

[[ ! -d dest ]] || rm -rf dest ; cp -R src dest 

Die oben überprüft, ob dest vorhanden ist; Wenn es rekursiv entfernt es, dann kopieren Sie die source zu dest,

1

können Sie cp -rp für diesen Vorgang werden soll. -p behält die Benutzer- und Gruppen-IDs bei, die mit der Datei verknüpft sind. Versuchen Sie über -p anzufangen und sehen, ob das das Problem löst.

Anther Grund Sie möglicherweise dieses Problem sehen, wenn die Berechtigung wirklich verweigert wird. Das heißt, wenn Sie versuchen, in einen Ordner zu kopieren, der einem anderen Benutzer ohne Superuser-Berechtigungen gehört.

+0

Danke, aber diese Antwort hat nicht funktioniert. Ich habe sowohl 'cp -rp' als auch' cp -r-p' ausprobiert. – Mowzer

+1

'cp -f' könnte relevanter sein (obwohl das' -p' keine schlechte Idee ist). –