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.
- name: tasks replace
replace:
regexp: '^(.*\.)@@(.*)$'
replace: '\1$$\2'
Ответ GMaster будет соответствовать последнему вхождению в каждой строке, следующая версия использует нежадное совпадение, чтобы найти первое вхождение в строке, и жадное совпадение для остальной части файла, чтобы избежать сопоставления любых дальнейших вхождений в следующих строках.:
- name: tasks replace
replace:
regexp: '^(.*?\.)@@([.\n]*)$'
replace: '\1$$\2'
Ответ основан на последней версии сообществаhttps://docs.ansible.com/ansible/latest/collections/ansible/builtin/replace_module.html