Script renomeando no Synology NAS

0

Eu tenho um Synology Nas que tem muitos arquivos com caracteres inválidos (o Nas não concede permissões para os usuários acessarem o arquivo se esse caractere existir no nome), como * . " / \ [ ] : ; | = , . Eu consegui obter o CLI em a caixa e queria saber se existe uma maneira de alterar os nomes de arquivos em todas as pastas compartilhadas ou alterar os caracteres ofensivos com _ . A estrutura da árvore de arquivos é bastante profunda.

    
por Giorgos Tzortzatos 22.01.2018 / 14:52

5 respostas

0

Você pode usar o comando find aqui:

find / -name "*" -exec ~/bin/some_script_that_will_rename_files.sh {} \;

e você precisa de um script que renomeie os arquivos como quiser. Por exemplo. pode substituir todos os personagens por outra coisa.

A questão é, se você tem esses caracteres estranhos somente dentro de nomes de arquivos ou se eles estão em diretórios também.

    
por 22.01.2018 / 15:00
0

Veja se você pode executar o Perl nele:

perl -v

Se ele for executado, você poderá instalar ou verificar se os scripts Perl rename são executados e pode facilmente renomear arquivos. Exemplo:

touch "Freddy :;|=, Frog"                         # create file with mad name

rename --dry-run 's/[:;|=,]/_/g' *Frog            # see what it would become
'Freddy :;|=, Frog' would be renamed to 'Freddy _____ Frog'

Eu fiz alguns outros exemplos - veja aqui .

Se você não pode usar rename , então pode usar algo assim, mas teste primeiro algumas CÓPIAS de alguns arquivos e faça um backup antes de executá-lo.

Aqui estou apenas testando em arquivos GIF, então não faço bagunça. Além disso, eu realmente não faço nada, apenas produzo o que eu faria:

find . -iname "*gif" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); echo "mv {} $new"' \;

Se isso parece correto, você precisa fazer o seguinte comando:

find . -iname "*gif" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;

, que é um pouco diferente, porque não há echo e preciso citar duas vezes os parâmetros para mv .

    
por 22.01.2018 / 19:51
0

Muito obrigado a Mark Setchell e mko pela ajuda. Acabei com os seguintes comandos

find . -iname "*:*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;
find . -iname "*<*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;
find . -iname "*>*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;
find . -iname "*|*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;
find . -iname "*?*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;
find . -iname "*[*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;
find . -iname "*]*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;
find . -iname "*\*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \;
    
por 24.01.2018 / 16:32
0

'brename' é um binário Go que faz o trabalho pesado.
Passei muito tempo tentando resolver em bash (synology nas é busybox, o Ubuntu é hoje em dia) regexing. link

tem binários para o linux de 64 bits (dependendo da idade do seu nas).

ssh no seu nas, wget download binary, do link. cortar fora.

./ brename -d -R -p ":" -r "" / volume1 / share_name
(remove -d --dry-run)

resposta mais longa:
(abra um terminal de shell)
$ ssh admin @ nas_ip_adress_or_dns_name [você pode depois $ sudo su root com a senha admin] $ wget link
$ tar -xvzf brename (pressione a guia para autocompletar)
então,
$ ./brename -R -p ":" -r "" / volume1 / share_name
add --dry-run para primeiro ver o efeito sem modificação. acima da linha substitui todos os ":" por um caractere de espaço.

    
por 23.10.2018 / 14:35
0

Publicando uma variação dos itens acima usando sed :

   find . -iname "*:*" -exec bash -c 'new=$(sed 's/:/___/' <<< "{}"); echo "{}" "$new"' \;

This is my preference only for readability and I'm only echo-ing above for safety. You'll want to use mv as others have noted.

    
por 28.04.2019 / 17:33