Muszę przenieść niektóre pliki z jednego systemu plików na inny w systemie Ubuntu. Jednak bardzo ważne jest, aby pliki nigdy nie istniały jako pliki częściowe lub niekompletne w miejscu docelowym, a przynajmniej nie pod poprawną nazwą pliku.
Jak dotąd moim jedynym rozwiązaniem jest napisanie skryptu, który pobiera każdy plik, kopiuje go do nazwy tymczasowej w miejscu docelowym, a następnie zmienia jego nazwę (która moim zdaniem powinna być atomowa) w miejscu docelowym na oryginalną nazwę pliku i na koniec usuwa plik źródłowy .
Jednak pisanie i debugowanie skryptu wydaje się przesadą w tym zadaniu. Czy istnieje sposób lub narzędzie, które już to robi w sposób natywny?
Odpowiedzi:
rsync
kopiuje do tymczasowych nazw plików (np. patrz rozszerzenie pliku tymczasowego Rsync i rsync - czy tworzy plik tymczasowy podczas przesyłania? ), chyba że skorzystasz z tej--inplace
opcji. Zmienia ich nazwy dopiero po pomyślnym przesłaniu pliku.rsync
usuwa również pliki docelowe, które zostały tylko częściowo przesłane (np. z powodu zapełnienia dysku lub innego błędu).Istnieje również
--remove-source-files
opcja, która usuwa pliki źródłowe po ich pomyślnym przesłaniu. Zobaczrsync
stronę podręcznika, aby uzyskać więcej informacji.Podsumowując, możesz użyć czegoś takiego:
Ta opcja jest szczególnie przydatna w przypadku zadań takich jak przenoszenie plików z kolejki „przychodzącej” lub podobnej do katalogu, w którym zostaną przetworzone.
Alternatywnie, jeśli jest to jednorazowe lustro, może po prostu użyć
rsync
bez--remove-source-files
opcji. Możesz usunąć pliki źródłowe później, jeśli chcesz / potrzebujesz.źródło
rsync
można zrobić, i wiedziałem, że przesyłało pliki o tymczasowej nazwie (chyba, że używasz--inplace
), więc spojrzałem wman rsync
i znaleziono--remove-source-files
.rsync
jest dobrym narzędziem do sprawdzenia w pierwszej kolejności prawie każdego zadania przesyłania plików.