2009-07-30 12 views

Odpowiedz

16

Można uzyskać ostatni czas modyfikacji pliku z stat, a bieżącą datę z date. Można użyć ciągi formatu zarówno do nich dostać w „sekund od początku epoki”:

current=`date +%s` 
last_modified=`stat -c "%Y" $file` 

Wtedy to dość łatwe do zakładania, że ​​w stanie. Na przykład:

if [ $(($current-$last_modified)) -gt 180 ]; then 
    echo "old"; 
else 
    echo "new"; 
fi 
+0

Dla użytkowników w systemie Solaris, pamiętać, że data +% s nie działa – Karl

+0

Jak powszechnie obsługiwana jest 'stat -c% Y'? Na OS X użyłbym 'stat -f% m', ale w niektórych smaków linuksowych' stat -f' wyświetla informacje o systemie plików. Większość systemów obsługuje 'date -r" $ file "+% s', ale jest niezręczne, że nie działa na OS X ... fajne rzeczy :) – Haravikk

3

Polecenie stat daje czas ostatniej modyfikacji

stat -c %y <filename> 
4

składni tego if zależy od konkretnej powłoki, ale polecenia data nie. Używam bash; modyfikować w razie potrzeby.

if [ $(($(date +%s) - $(date +%s -r <file>))) -le 180 ]; then 
    # was modified in last three minutes 
else 
    # was not modified in last three minutes 
fi 

+%s opowiada datę wyjścia czas UNIX (ważne nieco to, że jest liczbą całkowitą w sekundach). Możesz również użyć stat, aby uzyskać te informacje - komenda stat -c %Y <file> jest odpowiednikiem. Upewnij się, że używasz %Y, a nie %y, aby uzyskać czas użytkowania w sekundach.

0

Zmiana znacznika czasu pliku nie oznacza, że ​​pomyślnie skopiowano.
W przypadku uszkodzenia pliku lub braku wolnego systemu plików,
prawdopodobnie nadal będzie widoczna zmiana sygnatury czasowej (trzeba to potwierdzić).

Nie znam dokładnego kontekstu twojego wymagania.
Jeśli uruchomisz cp, to się zakończy i powróci - nie powraca, gdy działa.
Czy zatem powrót (z kodem wyjścia z sukcesem) nie jest dobrym wskaźnikiem sukcesu?

Jak i dlaczego miałbyś wyjść częściowo z operacji cp?
Czy jest to skrypt o numerze partii cp, który wykonuje pętlę nad listą plików ...
może pomóc niektóre opracowanie.

+0

cp jest wykonywany w jednym skrypcie, a weryfikacja odbywa się w innym skrypcie. więc istnieje nie zatrzyma cp w środku. przy okazji, w jaki sposób mogę uzyskać weryfikację istniejącego kodu cp? dziękuję – derrdji

+0

* uzyskaj ORAZ sprawdź – derrdji

2

Find może wypisać nazwę pliku, jeśli została zmodyfikowana w ciągu ostatnich 3 minut.

find file1 -maxdepth 0 -mmin -3