2013-04-02 20 views
6

Ich verwende den Befehl cp ./* "backup_$timestamp" in einem Bash-Skript, um alle Dateien im Verzeichnis in einen Sicherungsordner in einem Unterverzeichnis zu sichern. Dies funktioniert gut, aber das Skript hält die Ausgabe Warnmeldungen:cp: silence "Verzeichnis weglassen" Warnung

cp: omitting directory `./backup_1364935268' 

Wie kann ich cp sagen den Mund zu halten, ohne weitere Warnungen zum Schweigen zu bringen, die ich will vielleicht darüber wissen?

Antwort

2

Wahrscheinlich möchten Sie cp -r in diesem Skript verwenden. Das würde die Quelle rekursiv einschließlich der Verzeichnisse kopieren. Verzeichnisse werden kopiert und die Nachrichten verschwinden.


Wenn Sie auf Verzeichnisse nicht kopieren können Sie wie folgt vorgehen:

  • Umleitung Stderr 2>&1
  • Rohr mit an stdout die Ausgabe -v
grep
script | grep -v 'omitting directory' 

zitat von grep man seite:

-v, --invert-match 
      Invert the sense of matching, to select non-matching lines. 
+1

Eh, das wird funktionieren, denke ich. Ich hatte gehofft, es würde eine Art Option für cp geben, um solche Warnmeldungen zu unterdrücken, aber ich denke nicht. – Ajedi32

+0

Benötigen Sie eine rekursive Kopie aller Dateien und Verzeichnisse? Oder nur die Dateien in der ersten Ebene von 'backup_ $ timestamp'? – hek2mgl

+0

Nein, weil ich jedes Mal, wenn ich ein Backup mache, alle älteren Backups zusammen mit anderen Dateien sichern würde. Danke für Ihre Hilfe. – Ajedi32

7

Die Lösung, die für mich funktioniert, ist das folgende:

find -maxdepth 1 -type f -exec cp {} backup_1364935268/ \; 

Es kopiert alle (einschließlich diesen mit einem Punkt beginnen) Dateien aus dem aktuellen Verzeichnis, keine Verzeichnisse berühren und beschwert sich nicht darüber.

+0

Plus eins: Funktioniert in Makefile. – ace

+0

Hinweis: Sie benötigen ein Ziel als ersten Parameter bei der Verwendung von BSD finden (z. B. Mac), also: 'finden. -maxdepth 1 -type f -exec cp {} backup_1364935268/\; ' – jjj