znaleźć i rsync?

24

Chcę móc wyszukiwać pliki w ciągu 14 dni i powyżej 10 000, a następnie zsynchronizować znalezione pliki do miejsca docelowego.

Czy istnieje sposób na połączenie tych dwóch poleceń?

find ./ -mtime +14 -size +10k 
rsync --remove-sent-files -avz /src /dest
mkrouse
źródło

Odpowiedzi:

33

Możesz wysłać wyjście z find do rsync przy użyciu jednej z opcji opisanych poniżej.

Metoda nr 1

Te dwie opcje są bardzo podobne, obie zakładają, że zmieniasz katalogi w pewną lokalizację, a następnie uruchamiasz findstamtąd polecenie.

$ rsync -avz --remove-sent-files \
        --files-from=<(find ./ -mtime +14 -size +10k) ./ /dest

Możesz także użyć potoku, aby wprowadzić listę:

$ find ./ -mtime +14 -size +10k -print0 \
        | rsync -av --files-from=- --from0 ./ /dest

Metoda nr 2

Tę metodę można uruchomić z dowolnego miejsca.

$ find /src/dir/ -mtime +14 -size +10k -printf %P\\0 \
        | rsync --files-from=- --from0 /src/dir/ /dst/dir/
  • printf %P: Nazwa pliku z nazwą argumentu wiersza poleceń, pod którym został znaleziony, usunięty. W ten sposób możesz użyć dowolnego katalogu src, bez konieczności wcześniejszego zapisywania dysku CD w katalogu src.

Referencje

slm
źródło