Muszę wdrożyć zautomatyzowany proces (za pomocą skryptu cron 1 min), który szuka plików tar w określonym katalogu. Jeśli plik tar zostanie znaleziony, zostanie on rozpakowany do odpowiedniej lokalizacji, a następnie plik tar zostanie usunięty.
Pliki tar są automatycznie kopiowane na ten serwer przez SSH z innego serwera. W niektórych przypadkach pliki tar są bardzo duże i zawierają wiele plików.
Problem, na który mam się natknąć: jeśli skopiowanie pliku tar na serwer zajmie> 1 minutę, a skrypt cron będzie działał co minutę, zobaczy plik .tar.gz i spróbuje to zrobić rozpakuj go, mimo że plik tar nadal jest w trakcie zapisywania.
Czy jest jakiś sposób (za pomocą komend bash) przetestowania, czy plik jest obecnie zapisywany, czy jest to tylko plik częściowy itp.?
Jedną z możliwości, o której myślałem, było skopiowanie pliku jako innego rozszerzenia (jak .tar.gz.part
), a następnie zmiana nazwy na .tar.gz
po zakończeniu przesyłania. Ale pomyślałem, że spróbuję dowiedzieć się, czy istnieje prosty sposób, aby najpierw ustalić, czy plik jest cały w wierszu poleceń ... Jakieś wskazówki?
rsync
używa tymczasowej nazwy pliku podczas przesyłania (domyślnie) i dopiero po całkowitym przesłaniu pliku zmienia nazwę na rzeczywistą nazwę pliku.