Jak skanować pliki o rozmiarze mniejszym niż x?

13

Rozwijam coś na laptopie i scp'uję pliki na komputer o wysokiej wydajności (serwer bez monitora). Z lenistwa robię to teraz (na laptopie):

scp -r ~/project/* server:~/project/

Jednak niektóre pliki w katalogu projektu to niektóre pliki dziennika i pliki wyjściowe, których nie muszę wysyłać, co może czasem być koncertem. To, co chciałbym, to ładne czyste polecenie, które zasadniczo robi to samo (przesyła wszystkie pliki w projekcie i jego podkatalogach), ale wysyła tylko pliki poniżej określonego progu wielkości pliku, takiego jak 100 MB. Mam tylko niewielkie doświadczenie z bashiem, a wcale nie z regexpem, więc tak naprawdę nie mam pojęcia, jak to zrobić bez jakiejś skomplikowanej metody, takiej jak importowanie sysa do Pythona i korzystanie z wielu ifs i porównań.

iammax
źródło

Odpowiedzi:

27

możesz użyć polecenia „rsync”, które ma opcję kontrolowania rozmiaru pliku, który ma zostać wykluczony.

rsync -rv --max-size=100m /path/in/local/ server:~/project/

z „ man rsync ”,

--max-size=SIZE    don't transfer any file larger than SIZE

Zaktualizowana odpowiedź : po prostu wyklucz pliki dziennika za pomocą opcji „rsync” --exclude, jak poniżej

rsync -rv --exclude='*.log' --max-size=100m /path/in/local/ server:~/project/

lub możesz użyć kombinacji poleceń „find” z „scp” i określić limit rozmiaru pliku z jego -sizeopcją. użyj, ! -name '*.log'aby wykluczyć niektóre pliki zakończone na „log”.

find /path/in/local -type f ! -name '*.log' -size -100m -exec scp '{}' server:~/project/ \;
αғsнιη
źródło
1
Uwaga dla OP: rsyncjest podobna scp, ale bardziej wydajna, ponieważ przenosi zmiany tylko w przypadku modyfikacji pliku.
Paddy Landau,
uważaj na kolejność katalogów jakrsync -rv --max-size SOURCE DESTINATION. Nie czytałem poprawnie, a ten coud ma bardzo złe konsekwencje.
toto_tico