Cuidado ao ler este readme, pois ele difere entre versões do programa. Veja sempre o arquivo readme incluído na release que você baixou. Este readme, em particular, é referente à versão 2.5
A versão atual é incompatível com o arquivo de configuração usado até a versão 2.4. Você terá que atualizar sua configuração manualmente, caso o arquivo seja de versões mais antigas. Veja o novo modelo em configuração geral
A versão atual é incompatível com os arquivos de sincronização usados até a versão 2.4. Você terá que atualizar sua configuração manualmente, caso os arquivos sejam de versões mais antigas. Veja o novo modelo em sincronização
1D-Sync é uma ferramenta automatizada de "sincronização" unidirecional. Com ele é possível efetuar cópias de arquivos entre pastas em intervalos específicos de tempo, suportando diversas configurações e alguns filtros de arquivos. Foi desenvolvido como uma continuação do Fantastic-Five-Star-Music-Copier mas possui recursos extras (veja utilização).
Possuo um servidor de arquivos, um desktop e dois celulares com os quais sincronizo dados. Com o 1D-Sync, faço com que o servidor de arquivos copie certos arquivos entre essas pastas automaticamente. Por exemplo, as músicas avaliadas em 5 estrelas são sempre copiadas para um telefone que uso como dispositivo de mídia e também para o telefone que uso no dia-a-dia. Entretanto, como esse segundo possui muito pouco espaço de armazenamento, faço com que o 1D-Sync copie arquivos aleatórios até um certo tamanho (1.5GB) e os troque de tempo em tempo, de forma que eu não sinta tanto a falta de espaço. Também copio automaticamente as imagens de câmera e WhatsApp para a pasta sincronizada com meu desktop, entre outros. Para sincronizar essas pastas com os dispositivos eu utilizo o syncthing, que já recomendei anteriormente.
-
Python 3
- Linux: provavelmente já está incluído na sua distribuição. Apenas verifique o comando correto que executa a versão 3 (em algumas distros é
python
e em outraspython3
). Para verificar, rode esses comandos com o argumento -V e veja qual versão ele mostra - Windows: você pode rodar o instalador disponível no site oficial ou instalar através do Chocolatey com o comando
choco install python
- Linux: provavelmente já está incluído na sua distribuição. Apenas verifique o comando correto que executa a versão 3 (em algumas distros é
-
python-magic
- Com o pip instalado no sistema, rode
ou
pip install python-magic python-magic-bin
dependendo do sistema operacionalpip3 install python-magic python-magic-bin
- Com o pip instalado no sistema, rode
-
eyeD3
-
Linux: instalável através do pip com o comando
pip install eyed3
ou
pip3 install eyed3
dependendo da distribuição. Se a sua distro não inclui o pip na instalação, você deve instalá-lo antes disso. No Debian, por exemplo, o comando é
apt install python3-pip
-
Windows: baixe esta versão modificada da biblioteca, que suporta arquivos/caminhos com caracteres fora do inglês (como palavras acentuadas), extraia o arquivo .zip e, com o console dentro da pasta extraída, rode o comando
python setup.py install
-
-
Config: guarda arquivos de configuração
config.json
: guarda configurações gerais do programacontrol.json
: guarda o agendamento das sincronias
-
Logs: guarda os logs de execução do programa. Cada log é nomeado com a data e hora de execução no padrão
Y-M-D h-m-s.txt
-
Syncs: guarda as sincronizações que o programa deve realizar. Cada arquivo
.json
representa uma sincronia diferente e a hierarquia não é relevante, você pode organizar as sincronias dentro de pastas dentro de Syncs, se desejar. Inclui um arquivo modelosync.json.example
, que você pode editar para criar uma sincronia (lembre-se de renomeá-lo com a extensão.json
)
Edite o arquivo Config/config.json
, colocando os valores à direita de acordo com suas preferências. Os valores devem estar entre aspas:
-
check_cooldown
: valor numérico de espera, em segundos, entre as tentativas de sincronização. Deve ser um valor numérico inteiro maior do que zero - [opcional, o valor padrão é 3600] -
startup_delay
: valor numérico de espera, em segundos, do início da execução antes de começar as sincronizações, sendo útil para não sobrecarregar a inicialização do sistema. Deve ser um valor numérico inteiro maior ou igual a zero - [opcional, o valor padrão é 0] -
save_log
: define se o log será salvo, deve ser True ou False - [opcional, o valor padrão é True] -
skip_log_if_nothing_happened
: evitará a gravação do log caso não tenha ocorrido nenhum erro e nenhuma sincronia, deve ser True ou False - [opcional, o valor padrão é False] -
skip_log_on_success
: evitará a gravação do log caso tenha ocorrido alguma sincronia mas não tenha ocorrido nenhum erro, deve ser True ou False - [opcional, o valor padrão é False] -
send_email
: define se o email será enviado, deve ser True ou False - [opcional, o valor padrão é False] -
email_sender
: endereço de email responsável pelo envio de relatórios de sincronização (somente gmail suportado até o momento, verifique as opções de conta para habilitar o acesso por SMTP) - [obrigatório sesend_email
for True, não possui valor padrão] -
email_sender_password
: senha do email de relatórios, recomendável criar uma conta de email apenas para esta finalidade, uma vez que a senha ficará em texto plano - [obrigatório sesend_email
for True, não possui valor padrão] -
email_addressee
: endereço de email para onde os relatórios são enviados - [obrigatório sesend_email
for True, não possui valor padrão] -
skip_email_if_nothing_happened
: evitará o envio do email caso não tenha ocorrido nenhum erro e nenhuma sincronia, deve ser True ou False - [opcional, o valor padrão é False] -
skip_email_on_success
: evitará o envio do email caso tenha ocorrido alguma sincronia mas não tenha ocorrido nenhum erro, deve ser True ou False - [opcional, o valor padrão é False] -
post_sync_script
: script a ser executado após a sincronização. Rodará uma vez por loop do programa (ou seja, uma vez a cada período de tempocheck_cooldown
), imediatamente antes da gravação do log e envio do email. Se você está rodando no Windows e deseja utilizar funções do cmd comodir
, acrescente ao início da linha o comandopowershell
, seguido do comando. Outra possibilidade é criar um arquivo .bat e executá-lo diretamente - [opcional, o valor padrão é um comando vazio] -
run_post_sync_script_only_if_a_sync_occur
: define se o script pós-sincronização rodará apenas quando alguma sincronia for executada, ignorando as que estão em espera. Deve ser True ou False - [opcional, o valor padrão é False] -
run_continuously
: define se o programa executará em loop ou se encerrará imediatamente após o fim da sincronização, deve ser True ou False - [opcional, o valor padrão é True]
O arquivo Config/control.json
armazena as datas e horários das sincronizações, não é necessário editá-lo. Entretanto, caso queira forçar uma sincronização na próxima tentativa, basta remover a(s) respectivas linhas do arquivo ou trocar sua data agendada.
Utilize o arquivo Syncs/sync.json.example
como template para criar uma sincronização. Note que o arquivo, para ser considerado, deve possuir a extensão .json
, então você deve renomeá-lo (recomendável fazer uma cópia desse arquivo e renomear a cópia). Os valores devem estar entre aspas:
-
enable
: define se esta sincronização está ativa ou não, deve ser True ou False - [obrigatório] -
source_path
: caminho para a pasta de origem. Não pode ser a mesma ou uma subpasta dedestination_path
. No Windows, substitua as barras invertidas\
do caminho por barras invertidas duplas\\
ou barras normais/
, do contrário a sintaxe do arquivo estará incorreta - [obrigatório] -
source_selection_condition
: condição de seleção de arquivos da pasta de origem, veja condições de seleção - [opcional, o valor padrão é anyfile] -
source_subfolder_search
: define se serão procurados arquivos nas subpastas da pasta de origem, deve ser True ou False - [opcional, o valor padrão é True] -
source_filelist_shuffle
: define se a lista de arquivos selecionados da origem será embaralhada, deve ser True ou False - [opcional, o valor padrão é False] -
destination_path
: caminho para a pasta de destino. Não pode ser a mesma ou uma subpasta desource_path
. No Windows, substitua as barras invertidas\
do caminho por barras invertidas duplas\\
ou barras normais/
, do contrário a sintaxe do arquivo estará incorreta - [obrigatório] -
destination_selection_condition
: condição de seleção de arquivos da pasta de destino, veja condições de seleção - [opcional, o valor padrão é anyfile] -
destination_subfolder_search
: define se serão procurados arquivos nas subpastas da pasta de destino, deve ser True ou False - [opcional, o valor padrão é True] -
destination_filelist_shuffle
: define se a lista de arquivos selecionados do destino será embaralhada, deve ser True ou False - [opcional, o valor padrão é False] -
inaccurate_comparison
: define se uma técnica de comparação de arquivos mais rápida, porém imprecisa, será usada. Faz com que apenas o nome do arquivo seja comparado, deve ser True ou False - [opcional, o valor padrão é False] -
hierarchy_maintenance
: define se a hierarquia de pastas será mantida na pasta destino, deve ser True ou False - [opcional, o valor padrão é True] -
left_files_deletion
: define se os arquivos da pasta destino que não estiverem mais na pasta de origem ou não passarem na validação serão removidos, deve ser True ou False - [opcional, o valor padrão é False] -
file_override
: define se os arquivos serão sobrescritos independetemente de já estarem presentes na pasta destino, deve ser True ou False - [opcional, o valor padrão é False] -
size_limit
: define o tamanho limite de arquivos na pasta destino, deve ser um valor numérico inteiro maior ou igual a zero, 0 significa ilimitado e o valor é lido em MB - [opcional, o valor padrão é 0] -
sync_cooldown
: define o intervalo de tempo, em segundos, no qual a sincronização ficará dormente após executar, deve ser um valor numérico inteiro maior que zero - [opcional, o valor padrão é 14400]
Para ter mais de uma sincronização basta criar outro arquivo dentro da pasta Syncs
, atentando para as mesmas regras. Arquivos dentro de pastas também serão lidos, desde que sejam válidos nas mesmas regras.
Os logs de execução registram um histórico da execução do programa para que seja possível identificar um eventual problema e verificar que operações estão sendo feitas. O log inclui as seguintes informações:
- Nome do programa, versão, codenome e data de construção
- Status do carregamento dos arquivos
- Para cada sincronia status das operações, arquivos apagados, pastas apagadas e arquivos copiados
- Saída do terminal do script pós sincronização
- Envio do email
- Atualização do arquivo de controle
As condições de seleção atualmente disponíveis estão a seguir.
Você pode utilizar uma expressão lógica simples para montar condições de seleção compostas ou personalizadas. Para uma lista de símbolos e exemplos veja expressões lógicas
As condições de seleção são divididas em 6 tipos: genérica, extensão, tipo, eyed3, idade e tamanho do arquivo
-
Genérica
-
anyfile
: selecionará qualquer arquivo -
none
: não selecionará nenhum arquivo. Cuidado ao usar essa funcionalidade, pode quebrar a deleção de arquivos sobrando e a não sobrescrita de arquivos no destino, por exemplo.
-
-
Extensão: seleciona arquivos cuja extensão seja igual à opção recebida. Funciona seguindo o modelo
ext:extensão
, ondeext:
é o prefixo que ativa esta opção. Por exemplo:ext:.txt
selecionará arquivos com a extensão.txt
ext:.mp3
selecionará arquivos com a extensão.mp3
-
Tipo: seleciona arquivos que pertençam ao tipo definido, independentemente da extensão do arquivo. Funciona seguindo o modelo
type:tipo
, ondetype:
é o prefixo que ativa esta opção. Esta opção é implementada usando tipos MIME e você pode consultar uma lista de tipos possíveis aqui. Por exemplo:type:image
selecionará todos os arquivos do tipo imagemtype:audio
selecionará todos os arquivos do tipo audio
-
eyeD3: seleciona arquivos mp3 com base em informações obtidas através da biblioteca eyed3. Funciona seguindo o modelo
eyed3:tag:valor
, ondeeyed3
é o prefixo que ativa esta opção,tag
é o nome da tag sendo referenciada,valor
é o valor desejado que a tagtag
possua. Por exemplo:eyed3:artist:Artista
selecionará todos os arquivos mp3 que possuam na tag artist o valor Artista
As tags suportadas são:
artist
album
title
rating
Para a tag rating,
valor
assume o formatocomp:val
, ondecomp
é uma comparação matemática eval
é o valor de referência com o qual o arquivo será comparado. Por exemplo:eyed3:rating:>=:4
selecionará todos os arquivos mp3 que possuam a na tag rating um valor maior ou igual a 4.eyed3:rating:<:3
selecionará todos os arquivos mp3 que possuam a na tag rating um valor menor que 3.
Para uma lista de comparações matemáticas possíveis veja comparações matemáticas
-
Idade: seleciona arquivos cuja data de modificação satisfaça à condição estabelecida. Funciona seguindo o modelo
age:comp:valor
ondeage
é o prefixo que ativa esta opção,comp
é uma comparação matemática evalor
é o valor de referência com o qual o arquivo será comparado. Por exemplo:-
age:<=:7
selecionará todos os arquivos que foram modificados há 7 dias ou menos -
age:>:365
selecionará todos os arquivos que foram modificados há mais de 365 dias
Para uma lista de comparações matemáticas possíveis veja comparações matemáticas
-
-
Tamanho do arquivo: seleciona arquivos cujo tamanho em MB satisfaça à condição estabelecida. Funciona seguindo o modelo
size:comp:valor
ondesize
é o prefixo que ativa esta opção,comp
é uma comparação matemática evalor
é o valor de referência com o qual o arquivo será comparado. Por exemplo:-
size:<=:10
selecionará todos os arquivos com 10MB ou menos -
size:>:1000
selecionará todos os arquivos maiores que 1000MB
Para uma lista de comparações matemáticas possíveis veja comparações matemáticas
-
Os símbolos para expressões lógicas estão a seguir.
Espaços não são permitidos mas você pode usar o símbolo de soma +
no lugar deles, ele será considerado um espaço internamente e é permitido pela sintaxe.
símbolo | operação |
---|---|
~ | não lógico |
^ | e lógico |
| | ou lógico |
{ | entrada de pilha de preferência |
} | saída de pilha de preferência |
As operações serão avaliadas na ordem que estiverem a menos que uma pilha de preferência {}
seja usada.
Exemplos:
type:text ^ age:<=:7
type:audio | type:image
~{type:image | type:video}
type:audio ^ ~ext:.ogg
Os símbolos não são os mais intuitivos para evitar conflitos com nomes de arquivo e tags.
As comparações matemáticas possíveis para as condições de seleção suportadas são:
símbolo | operação |
---|---|
= | igual |
/= | diferente |
> | estritamente maior |
< | estritamente menor |
>= | maior ou igual |
<= | menor ou igual |
Note que as condições de seleção somente suportam comparações matemáticas quando especificamente mencionado. As demais condições não suportam tais comparações.
Note, também, que somente valores inteiros são suportados no momento.
Uma boa combinação é utilizar run_continuously
juntamente com a inicialização do sistema, de forma que o programa esteja sempre em rodando em background. Para fazer isso verifique os passos a seguir, de acordo com seu sistema operacional.
-
Linux: Está incluído na pasta do projeto um script de inicialização usando o systemd em modo usuário. Você deve abrir um terminal na pasta do projeto e rodar o arquivo
systemd-startup.sh
. Ele copiará o projeto para uma pasta oculta na sua home com o nome.1dsync
e iniciará sempre que você fizer login.Você também pode agendar a sua inicialização utilizando alguma ferramenta própria de sua distribuição ou ambiente gráfico ou ainda agendar a inicialização com o sistema utilizando o crontab.
- execute o comando
crontab -e
- adicione a linha
ou
@reboot python /caminho/da/pasta/1dsync.py
dependendo da distribuição.@reboot python3 /caminho/da/pasta/1dsync.py
Não agende sua inicialização para o usuário root, isso pode afetar pastas do sistema caso algum parâmetro de destino esteja errado.
- execute o comando
-
Windows: Você pode agendar a sua inicialização criando um arquivo .bat na pasta
Inicializar
do seu usuário. Você pode executar o arquivowindows-startup.bat
que copiará o projeto para uma pasta dentro da sua pasta de usuário com o nome.1dsync
(será ocultada por padrão) e rodará na inicialização da máquina.Você também pode fazer isso manualmente. Por exemplo, criando o arquivo
C:\Users\Usuário\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\1dsync.bat
com o seguinte conteúdo:
start pythonw C:\caminho\da\pasta\1dsync.py
Be careful when reading this readme because it differs between versions. Always read the readme file included in the release you downloaded. This particular readme refers to the version 2.5
The current version is incompatible with the configuration file used until 2.4. You will need to update your configuration manually, if the file were from older versions. See the new model in general configuration
The current version is incompatible with the sync files used until 2.4. You will need to update your configuration manually, if the files were from older versions. See the new model in syncing
1D-Sync is an automated unidirectional "synchronization" tool. With it, it's possible to do file copy operations between folders in specified time intervals, supporting various configurations and some file filters. It was developed as a continuation of Fantastic-Five-Star-Music-Copier but it has some extra features (see utilization).
I have a domestic file server, a desktop machine and two smartphones wich I sync data. With 1D-Sync I made the server copy certain files between these folders automatically. For instance, the 5 star rating musics are always copied to a phone that I use as a media device and for a phone I use as a daily driver. However, as the second one has very little storage space, I set 1D-Sync to copy random files until certain size (1.5GB) and change them from time to time, in a way that I don't feel the short storage space so much. I also set it to copy images from the camera and WhatsApp to the folder synchronized with my desktop, and so on. To sync the folders between those devices I use syncthing, wich I previously recommended.
-
Python 3
- Linux: probably its already included in your distro. Just double check the correct command that executes the version 3 (in some distros its
python
and in others itspython3
). To verify, run these commands with the -V argument and see what version it shows. - Windows: you can run the installer available in the official website or install using Chocolatey with the command
choco install python
- Linux: probably its already included in your distro. Just double check the correct command that executes the version 3 (in some distros its
-
python-magic
- With pip installed, run
or
pip install python-magic python-magic-bin
depending on your systempip3 install python-magic python-magic-bin
- With pip installed, run
-
eyeD3
-
Linux: installable through pip with the command
pip install eyed3
or
pip3 install eyed3
depending on your distro. If your distribution doesn't include pip by default, you must install it before that. In Debian, for instance, the command is
apt install python3-pip
-
Windows: download this modified version of the library that supports files/paths with non english characters, extract the .zip file and, with the console in the extracted folder, run the command
python setup.py install
-
-
Config: stores configuration files
config.json
: stores general program configurationscontrol.json
: stores the sync schedule
-
Logs: stores program execution logs. Each log is named with the date and time of the execution following the model
Y-M-D h-m-s.txt
-
Syncs: stores the syncs that the program will execute. Each
.json
file represents a different sync and the hierarchy is not relevant, you can organize the syncs in folders inside the folder Syncs, if you want. Includes a model filesync.json.example
, wich you can edit to create a sync (remember to rename it with the extension.json
)
Edit the file Config/config.json
, changing the values on the right according to your preferences. The values must be between quotes:
-
check_cooldown
: numerical value, in seconds, between synchronization attempts. Must be an integer numerical value greater than zero - [optional, the default value is 3600] -
startup_delay
: numerical value, in seconds, to wait before starting the synchronizations, being useful to not overload the system initialization. Must be an integer numerical value greater than or equal to zero - [optional, the default value is 0] -
save_log
: defines if the log will be saved, must be True or False - [optional, the default value is True] -
skip_log_if_nothing_happened
: skips writing the log if no sync occurred and no errors occurred, must be True or False - [optional, the default value is False] -
skip_log_on_success
: skips writing the log if some sync occurred but no errors occurred, must be True or False - [optional, the default value is False] -
send_email
: defines if the email will be sent, must be True or False - [optional, the default value is False] -
email_sender
: email address wich will send synchronization reports (only gmail is supported until now, check the account options to enable SMTP access) - [required ifsend_email
is True, doesn't have a default value] -
email_sender_password
: report email account password, is recommended to create an account ony for this porpose, since the password will be in plain text - [required ifsend_email
is True, doesn't have a default value] -
email_addressee
: email address to where the reports are sent - [required ifsend_email
is True, doesn't have a default value] -
skip_email_if_nothing_happened
: skips sending the email if no sync occurred and no errors occurred, must be True or False - [optional, the default value is False] -
skip_email_on_success
: skips sending the email if some sync occurred but no errors occurred, must be True or False - [optional, the default value is False] -
post_sync_script
: script to be executed after the synchronization. It will run once per program loop (once everycheck_cooldown
time period), immediately before the log write and sending the email. If you're running on Windows and want to use cmd functions likedir
, add at the beginning of the line the commandpowershell
, followed by the command. Another option is to create a .bat file and run it directly - [optional, the default value is an empty command] -
run_post_sync_script_only_if_a_sync_occur
: defines if the post sync script will run only if a sync was executed, ignoring the ones in cooldown. Must be True or False - [optional, the default value is False] -
run_continuously
: defines if the program will run in loop or if it will stop immediately after the synchronization loop, must be True or False - [optional, the default value is True]
The file Config/control.json
stores dates and times of the synchronizations, it's not necessary to change it. However, if you want to force a sync to run on the next attempt you can remove the respective line from the file or change it to some chosen date and time.
Use the file Syncs/sync.json.example
as a template
to create a synchronization. Note that the file, to be considered, must have the .json
extension, so you have to rename it (recommended to duplicate this file and rename the copy). The values must be between quotes:
-
enable
: sets if this sync will be active or not, must be True or False - [required] -
source_path
: path to the source folder. Cannot be the same or a subdirectory ofdestination_path
. On Windows, change the inverted slashes\
from the path to double inverted slashes\\
or normal slashes/
, or the syntax will be wrong - [required] -
source_selection_condition
: selection condition for the files in the source folder, see selection conditions - [optional, the default value is anyfile] -
source_subfolder_search
: sets if the program will search for files in subfolders of the source folder, must be True or False - [optional, the default value is True] -
source_filelist_shuffle
: sets if the source file list will be shuffled, must be True or False - [optional, the default value is False] -
destination_path
: path to the destination folder. Cannot be the same or a subdirectory ofsource_path
. On Windows, change the inverted slashes\
from the path to double inverted slashes\\
or normal slashes/
, or the syntax will be wrong - [required] -
destination_selection_condition
: selection condition for the files in the destination folder, see selection conditions - [optional, the default value is anyfile] -
destination_subfolder_search
: sets if the program will search for files in subfolders of the destination folder, must be True or False - [optional, the default value is True] -
destination_filelist_shuffle
: sets if the destination file list will be shuffled, must be True or False - [optional, the default value is False] -
inaccurate_comparison
: sets if a faster but inaccurate file comparison technique will be used. Only the filenames will be compared if used, must be True or False - [optional, the default value is False] -
hierarchy_maintenance
: sets if the directory hierarchy will be preserved on the destination folder for the copied files, must be True or False - [optional, the default value is True] -
left_files_deletion
: sets if the files on the destination folder that are not on the source file list or did not pass the chosen validation will be removed, must be True or False - [optional, the default value is False] -
file_override
: sets if the files will be overwritten even if they are already on the destination folder, must be True or False - [optional, the default value is False] -
size_limit
: sets the size limit of the destination folder, must be an integer numerical value greater than or equal to zero, 0 means unlimited and the value is read in MB - [optional, the default value is 0] -
sync_cooldown
: sets the time interval, in seconds, where the sync will be sleeping after the execution, must be an integer numerical value greater than zero - [optional, the default value is 14400]
To have more than one sync you can just create another file inside the Syncs
folder, paying attention to the same rules. Files inside folders will be used too, provided that they follow the same rules.
The execution logs maintain a history of the program execution to be possible to identify an eventual problem and to verify that the operations are being made correctly. The log includes the following information:
- Program name, version, codename and build date
- File loading status
- For each sync the status of operations, deleted files, deleted folders and copied files
- Terminal output of the post-sync script
- Email sending status
- Control file update
The selection conditions currently available are as follows.
You can use a simple logical expression to create composite or custom selection conditions. For a list of symbols and examples see logical expressions
The selection conditions are divided in 6 types: generic, extension, type, eyed3, age and file size
-
Generic
-
anyfile
: will select any file -
none
: will not select any file. Be careful when using this function, it may break left files deletion and file override (forcing override even when not asked), for instance.
-
-
Extension: will select files with an extension equal to the option received. Works like the model
ext:extension
, whereext:
is the prefix that activates this option. For example:ext:.txt
will select files the the extension.txt
ext:.mp3
will select files the the extension.mp3
-
Type: will select files that belong to the defined type, regardless of the file extension. Works like the model
type:filetype
, wheretype:
is the prefix that activates this option. This option is implemented using MIME types and you can see a list of possible types here. For instance:type:image
will select image filestype:audio
will select audio files
-
eyeD3: will select mp3 files based on information received from the eyed3 library. Works like the model
eyed3:tag:value
, whereeyed3
is the prefix that activates this option,tag
is the name of the tag being referenced andvalue
is the value that the tagtag
must have. For instance:eyed3:artist:Artist
will select mp3 files with the artist tag equal to Artist
The supported tags are:
artist
album
title
rating
For the rating tag,
value
assumes the formatcomp:val
, wherecomp
is a mathematical comparison andval
is the reference value being compared to. For instance:eyed3:rating:>=:4
will select mp3 files with the rating tag greater or equal to 4eyed3:rating:<:3
will select mp3 files with the rating tag lesser than 3
For a list of possible mathematical comparisons see mathematical comparisons
-
Age: will select files that the modified date meets the stablished condition. Works like the model
age:cond:value
whereage
is the prefix that activates this option,cond
is a mathematical comparison andvalue
is the reference value being compared to. For instance:-
age:<=:7
will select files modified 7 days ago or less. -
age:>:365
will select files modified more than 365 days ago
For a list of possible mathematical comparisons see mathematical comparisons
-
-
File size: will select files that the size in MB meets the stablished condition. Works like the model
size:cond:value
wheresize
is the prefix that activates this option,cond
is a mathematical comparison andvalue
is the reference value being compared to. For instance:-
size:<=:10
will select files with 10MB or less -
size:>:1000
will select files larger than 1000MB
For a list of possible mathematical comparisons see mathematical comparisons
-
The symbols for logical expressions are as follows. Spaces are not allowed but you can use the plus symbol +
instead of them, it will be considered a space internally and its allowed by the syntax.
symbol | operation |
---|---|
~ | logical not |
^ | logical and |
| | logical or |
{ | preferential stack in |
} | preferential stack out |
The operations will be evaluated in the same order of the string unless a preferential stack {}
is used.
Examples:
type:text ^ age:<=:7
type:audio | type:image
~{type:image | type:video}
type:audio ^ ~ext:.ogg
The symbols are not the most intuitive ones to prevent conflicting with filenames and tags.
The possible mathematical comparisons for the supported selection conditions are:
symbol | comparison |
---|---|
= | equal |
/= | different |
> | strictly greater |
< | strictly lesser |
>= | greater than or equal to |
<= | lesser than or equal to |
Please note that the selecion conditions only support mathematical comparisons when specificaly mentioned. Other conditions do not support this feature.
Also, note that only integer values are supported for now.
A good combination is to use run_continuously
together with the system initialization, so the program will be always running in background. To achieve this, check the steps below, according with your operating system:
-
Linux: An init script for systemd as unprivileged user is included in the project folder. You have to open a terminal window in the project root folder and run the file
systemd-startup.sh
. It will copy the project to a hidden folder on your home with the name.1dsync
and will run every time you do login.You can also schedule its initialization using some tool of your distribution or desktop environment or use crontab.
- run the command
crontab -e
- add the line
ou
@reboot python /path/to/folder/1dsync.py
depending on your distro.@reboot python3 /path/to/folder/1dsync.py
Don't schedule its initialization to the root user, this can affect system folders if some destination parameter was mistaken.
- run the command
-
Windows: You can schedule its initialization creating a .bat file in the
Startup
folder of your user. You can run the filewindows-startup.bat
that will copy the project to folder.1dsync
inside your user folder (will be hidden by default) and will execute with the system initialization.You can also do it manually. For instance, create the file
C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\1dsync.bat
with the following content:
start pythonw C:\path\to\folder\1dsync.py