rsync Перемещение окна последних k подкаталогов

Дело в том, как обрабатывается буферизация в этих программах.

Если вы хотите, чтобы grep выводил данные, переданные по трубопроводу, немедленно, используйте его с опцией --line-buffered.

ping -c 10 google.com | grep --line-buffered -o 'time\S*' | sed -e 's/time=//'

Если вы хотите, чтобы awk немедленно выводил данные по трубопроводу, вы можете использовать опцию -W interactive.

ping -c 10 google.com | awk -W interactive '{ print $7 }'

Для получения дополнительной информации вам следует прочитать man-страницы этих приложений.

2
16.06.2018, 20:57
1 ответ

Sí, esto es posible.

Una /bin/shsolución:

#!/bin/sh

# number of entries to sync
k=2

# generate file list (sets $1, $2, $3 etc., collectively known as $@)
set -- src/*

# shift off all but the last $k of these entries
shift "$(( $# - k ))"

# create include patterns ($entry is not actually used,
# we work on the 1st element and then add it to the end and shift)
for entry do
    set -- "$@" --include="${1##*/}/***"
    shift
done

# run rsync
rsync --verbose --archive --delete --delete-excluded "$@" --exclude='*' src/ dest/

Esto crea una lista de archivos en $@con setprimero (esta lista se ordena lexicográficamente, porque los globs hacen eso ), luego elimina todos menos el último $kde estos. El bucle convierte cada src/elementen --include=element/***. Este patrón de inclusión hará que rsyncconsidere el nombre elementy cualquier cosa debajo de él. Estos patrones de inclusión se utilizan en la línea de comando rsyncjunto con --exclude='*', que excluirá todo lo que no esté incluido explícitamente (Asuntos de la primera coincidencia ).

La ​​ejecución rsyncusa --delete, que eliminará cualquier elemento de los subdirectorios incluidos en el destino que no esté disponible en el directorio de origen, y --delete-excludedeliminará además todo lo que se excluyó.

Ejecute el script con sh -xpara ver qué sucede.

También podría hacer esto en bashcon arreglos, pero la sintaxis es un poco desordenada.

2
27.01.2020, 22:09

Теги

Похожие вопросы