Eu tenho uma lista de diretórios marcados com "(Concluído)" no final do rótulo.
Por exemplo: "Pasta 1 (Concluído)"
Estou procurando remover "(Concluído)" de cada diretório usando o comando rename. Por ser um caractere especial, estou usando o caractere de escape.
rename s/\(Done\)//g *
No entanto, este comando não funciona. Ele remove a palavra "Concluído" e deixa os parênteses: "Pasta 1 ()"
\
é um operador de citação na sintaxe do shell, portanto:É o mesmo que executar:
E
(
,)
são caracteres especiais na sintaxe de expressão regular perl (querename
usa) e precisam ser prefixados com\
(ou alterados para[(]
e[)]
) para que sejam tratados literalmente.Então aqui você quer:
Aqui também adicionamos
\s*
para remover qualquer espaço em branco antes(Done)
e um./
prefixo, pois algumas variantes derename
engasgariam com nomes de arquivos que começam com-
.Isso deve funcionar:
Caso contrário, sem usar
rename
o comando (OT):Usando
find
:Isso usa
find
para escolher os diretórios que têm␣(Done)
no final de seus nomes e, em seguida, usa uma substituição de parâmetro padrão para remover essa string.Nenhuma verificação é feita para garantir que já não exista um diretório/arquivo com o nome de destino no mesmo diretório.
O
sh -c
script acima obviamente poderia ser executado sozinho também, com pequenas modificações para fazer os testes quefind
fizeram por ele: