Multiple filters via environment variables

What is the problem you are having with rclone?

I want to pass filters as environmental variables if at all possible.
I tried with the output below with no success.
Is there a way to do it or an alternative strategy I can use to achieve the same result?

Run the command 'rclone version' and share the full output of the command.

rclone v1.57.0
- os/version: ubuntu 20.04 (64 bit)
- os/kernel: 5.4.0-91-generic (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.17.2
- go/linking: static
- go/tags: none

and

rclone v1.61.1
- os/version: darwin 12.4 (64 bit)
- os/kernel: 21.5.0 (x86_64)
- os/type: darwin
- os/arch: amd64
- go/version: go1.19.4
- go/linking: dynamic
- go/tags: none

Which cloud storage system are you using?

Dropbox via API

The command you were trying to run (eg rclone copy /tmp remote:tmp)

rclone ls dropbox-api: --filter='- **.rar' --filter='- **.{jpg,png}' --ignore-case --human-readable

The rclone config contents with secrets removed.

[dropbox-api]
type = dropbox
client_id = **CLIENT_ID**
client_secret = **CLIENT_SECRET**
chunk_size = 64Mi
token = {"access_token":"*****","token_type":"bearer","refresh_token":"*****","expiry":"2023-01-07T19:27:57.955966+01:00"}
impersonate = user.name@gmail.com

A log from the command with the -vv flag

rclone ls dropbox-api: --filter='- **.rar' --filter='- **.{jpg,png}' --ignore-case --human-readable --dump filters
2023/01/07 17:21:51 NOTICE: Automatically setting -vv as --dump is enabled
--- start filters ---
--- File filter rules ---
- (?i)(^|/).*\.rar$
- (?i)(^|/).*\.(jpg|png)$
--- Directory filter rules ---
- (?i)(^|/).*\.rar$
- (?i)(^|/).*\.(jpg|png)$
--- end filters ---
... good output ...

RCLONE_FILTER="- **.rar - **.{jpg,png}" rclone ls dropbox-api: --ignore-case --human-readable --dump filters
2023/01/07 17:27:38 NOTICE: Automatically setting -vv as --dump is enabled
--- start filters ---
--- File filter rules ---
- (?i)(^|/).*\.rar - .*\.(jpg|png)$
--- Directory filter rules ---
- (?i)(^|/).*\.rar - .*\.(jpg|png)$
--- end filters ---
... bad output ...

Hi Daniele,

Looks like you can combine the two filters in one like this:

--filter='- **.{jpg,png,rar}'

and then use the environment variable RCLONE_FILTER='- **.{jpg,png,rar}' or RCLONE_EXCLUDE='**.{jpg,png,rar}'. If this is just an example and you want more complicated filtering, then you may have to use RCLONE_FILTER_FROM=myfilterfile.txt

You can find more details here:
https://rclone.org/docs/#environment-variables
https://rclone.org/filtering/#filter-from-read-filtering-patterns-from-a-file

Thanks, your example works in this simple case, but I will need some more complex filters and using a file is not always possible.
This is why I was wondering if there's a way to do combine filters.
The only other workaround I found is to include a string in an environment variable and print that string to file.

These are the only possibilities I can see in the documentation. I also briefly checked the code to see if a linefeed (ASCII 10) perhaps could be used as a secret delimiter hack, but don't think so.

So your workaround seems to be the best solution.