Просто заставьте awk
сделать все за вас
awk '$20 ~ /GET/{gsub(/"/, "", $24); sub(/[^.]*\./, "", $24); a[$24]++};
END{for (k in a)print k, a[k]}' /var/log/nginx/error_log
Si esto es bash, simplemente puede configurardotglob
:
shopt -s dotglob
Esto no coincide con .
o..
(en contraste con.*
).
Entonces se podría usar el mismo comando:
rsync -r --exclude="node_modules" "/r2g_shared_dir/vamoot"/*...
Es mejor dejar la coincidencia de patrones en rsync, entonces no depende del shell y las opciones que tenga ese shell en ese momento.
Cuando lo haces:
rsync -a /some/dir/* host:/remote/dir/
entonces en realidad le está pidiendo al shell que expanda la parte /some/dir/*
, de modo que rsync se ejecute así:
rsync -a /some/dir/adir /some/dir/afile /some/dir/anotherfile [etc] host:/remote/dir/
Esto suele ser bastante similar a lo que era la intención, sin embargo, no siempre como lo demuestra el hecho de que se hizo esta pregunta. Por lo tanto, es mejor ejecutar:
rsync -a /some/dir/ host:/remote/dir/
Ahora rsync (porque -a
es una abreviatura de -rlptgoD
que incluye -r
para recursividad )recorrerá recursivamente el directorio /some/dir
y sincronizará todo su contenido con /remote/dir
en el host remoto, incluidos los archivos de puntos directamente en /some/dir
.
Como la ruta de origen termina con una barra inclinada /
, los nombres de archivo transferidos omiten cualquier parte de la ubicación de origen. Si se pasó /some/dir
, entonces está diciendo que sincronice explícitamente el directorio dir
, incluido su nombre.Se recomienda adquirir el hábito de agregar la última barra inclinada en todo momento para evitar tal confusión, a menos que realmente comprenda lo que está sucediendo.
Я думаю, что лучше всего использовать архивный режим (-a ), страницы руководства говорят об этом :«Это эквивалентно -rlptgoD. Это быстрый способ сказать, что вы хотите рекурсию и хотите сохранить почти все (с -H, являющимся заметным упущением ).:
rsync -a /source/path/ /destination/path/