2013-04-02 8 views
6

Używam polecenia cp ./* "backup_$timestamp" w skrypcie basha do tworzenia kopii zapasowych wszystkich plików w katalogu do folderu kopii zapasowej w podkatalogu. Działa to dobrze, ale skrypt utrzymuje wysyłania wiadomości ostrzeżenie:cp: cisza "opuszczenie katalogu" ostrzeżenie

cp: omitting directory `./backup_1364935268' 

Jak mogę powiedzieć cp się zamknąć bez wyciszania jakiekolwiek inne ostrzeżenia, że ​​może chcę wiedzieć?

Odpowiedz

2

Prawdopodobnie chcesz użyć cp -r w tym skrypcie. To skopiowałoby rekursywnie źródło, w tym katalogi. Katalogi zostaną skopiowane, a wiadomości znikną.


Jeśli nie chcesz kopiować katalogi można wykonać następujące czynności:

  • przekierować stderr do stdout przy użyciu 2>&1
  • przelać wyjście grep -v
script | grep -v 'omitting directory' 

cytat z strony grep man:

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

Eh, to zadziała, jak sądzę. Miałem nadzieję, że będzie jakaś opcja na cp, żeby wyciszyć takie ostrzeżenia, ale chyba nie. – Ajedi32

+0

Czy potrzebujesz rekurencyjnej kopii wszystkich plików i katalogów? Lub tylko pliki na pierwszym poziomie 'backup_ $ timestamp'? – hek2mgl

+0

Nie, ponieważ za każdym razem, gdy robiłem kopię zapasową, tworzyłem kopie zapasowe wszystkich starszych kopii zapasowych wraz z innymi plikami. Dzięki za pomoc. – Ajedi32

7

Rozwiązanie, które działa dla mnie jest następująca:

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

kopiuje wszystkie (w tym te zaczynające się od kropki) plików z bieżącego katalogu, nie dotykać katalogów i nie narzeka na to.

+0

Plus jeden: działa w Makefile. – ace

+0

Uwaga: potrzebujesz miejsca docelowego jako pierwszego parametru podczas wyszukiwania BSD (np. Mac), więc: 'find. -maxdepth 1-type f -exec cp {} backup_1364935268/\; ' – jjj

Powiązane problemy