Stanąłem przed następującym problem: w znaleźć wszystkie pliki spełniające wybrane kryteria i skopiować je na inny udział dyskowy wraz z zachowaniem ich struktury katalogów.
Do odszukanie wszystkich wybranych plików można użyć polecenia find
i można na wyszukanych plikach użyć dowolnej komendy, np cp
:
Niestety, rozwiązanie takie nie sprawdzi się w mojej sytuacji, nie odwzoruje struktury katalogów.
Z pomocą może przyjść polecenie cpio
. Polecenie to jest pewnego rodzaju odpowiednikiem komendy tar
i jest używane np. przy tworzeniu archiwów RPM. Wywołanie, które pozwoli odwzorować strukturę katalogów kopiowanych plików:
Poszczególne opcje komendy oznaczają:
-p
– powoduje, że lista plików zostanie odczytana ze standardowego wejścia i następnie zostaną one skopiowane do wybranego katalogu-d
– w razie potrzeby tworzy strukturę katalogów-v
– na wyjściu błędu wypisuje informacje o kopiowanych plikach
Aktualizacja:
Można także napotkać następujący problem: nazwy plików zawierają znaki nietypowe, takie jak spacje, znaki tabulacji. Znaki te są używane przez powłokę do podziału linii poleceń na argumenty i sprawiają często problemy podczas kopiowania. W tym przypadku najprościej będzie skorzystanie z ciągów znaków zakończonych znakiem \0
. Należy tylko poinformować o tym zarówno polecenie find
jak i cpio
:
Więcej informacji można znaleźć w dokumentacji do polecenia.