cp nur Dateien, Verzeichnisse überspringen

938
eis

Die Verwendung von cp zum Kopieren von Dateien aus einem Verzeichnis, das ein leeres Verzeichnis enthält, führt ebenfalls zu einem Fehlerrückgabewert, der mein Skript fehlschlägt.

Gibt es eine Möglichkeit, die Verzeichnisse einfach zu überspringen, ohne einen Fehlerrückgabewert zu haben? Ich möchte, dass der Fehlerwert alle Fehler widerspiegelt, aber ein leeres Verzeichnis darin sollte einfach übersprungen werden, ohne als Fehler gemeldet zu werden.

Ich konnte nur rekursive Flag hinzufügen, -raber was ist, wenn ich kopiert einfach nicht das Verzeichnis wollen, aber ich tun möchte Fehler gemeldet werden?

2

1 Antwort auf die Frage

2
berserck

Ich schlage vor, rsync anstelle von cp zu verwenden. Wenn möglich, hat es die Option -m, die leere Ordner ausschließt. Beispiel:

rsync -am <origin> <destination> 

Erklärung des Befehls in explainhell.com

Ich verwende die Option -a, weil sie viele nette Standardaktionen ausführt. Wenn Sie möchten, können Sie auch die Option -r verwenden. Dadurch wird nur der rekursive Modus festgelegt.

[Einen Kommentar hinzufügen]

Ich kenne keinen Weg, dies mit cp zu tun, zumindest zeigt die Manpage keine Option, die das für Sie tun wird. Sie können wahrscheinlich eine komplexere Lösung finderstellen, indem Sie mit dem Befehl eine Liste der zu kopierenden Dateien / Verzeichnisse suchen und diese dann an cp übergeben. Dies wäre jedoch viel komplizierter als rsync. rsync ist in vielen linuxen sogar ziemlich standard

sagst du, das geht mit `cp` nicht so leicht? Ich benutze das lieber, weil es klarer ist, sofort zu erkennen, was es tut, aber wenn es auf diese Weise nicht verwendet werden kann, kann ich nach anderen Optionen suchen. eis vor 7 Jahren 0