Question: I'd like to know how could I find all files whose extension can be `.xml` and `.py` that contain the string "Jason" under a path "./" recursively?

Or how could I exclude `.po` from the search?

Answer: 
Try the following command. It will search only in the `.xml` and `.py` files for your name:

```
find . -type f \( -iname \*.xml -o -iname \*.py \) | xargs grep "Jason"

```

Hope this helps!
The best solution probably has been given already by nobody, however when the tool doesn't support searching a directory recursively for filenames one can enable the `globstar` option of `bash` and perform a recursive globbing:

```
shopt -s globstar; grep -F -l Jason **/*.{xml,py}

```

```none
user@user-X550CL:~/tmp$ tree -a
.
└── dir1
    └── dir
        ├── containing_Jason.py
        ├── containing_Jason.txt
        ├── containing_Jason.xml
        ├── not_containing_Jason.py
        ├── not_containing_Jason.txt
        └── not_containing_Jason.xml

2 directories, 6 files
user@user-X550CL:~/tmp$ shopt -s globstar
user@user-X550CL:~/tmp$ grep -F -l Jason **/*.{xml,py}
dir1/dir/containing_Jason.xml
dir1/dir/containing_Jason.py

```

The equivalent feature in `zsh` is enabled by default:

```
grep -F -l Jason **/*.{xml,py}

```

```none
user@user-X550CL ~/tmp % tree -a                       
.
└── dir1
    └── dir
        ├── containing_Jason.py
        ├── containing_Jason.txt
        ├── containing_Jason.xml
        ├── not_containing_Jason.py
        ├── not_containing_Jason.txt
        └── not_containing_Jason.xml

2 directories, 6 files
user@user-X550CL ~/tmp % grep -F -l Jason **/*.{xml,py}
dir1/dir/containing_Jason.xml
dir1/dir/containing_Jason.py

```