Renomeie todos os diretórios ocultos criados pelo GNU paralelo

Renomeie todos os diretórios ocultos criados pelo GNU paralelo

GNU Parallel está gerando diretórios ocultos da seguinte maneira usando o --resultsparâmetro.

Qual comando eu uso no Ubuntu para alterar todos os diretórios para que eles não fiquem mais ocultos. Os diretórios são chamados:

'.\_ValidateAll.sh GL 170'/
'.\_ValidateAll.sh GL 190'/
'.\_ValidateAll.sh GL 220'/
'.\_ValidateAll.sh GL 355'/
'.\_ValidateAll.sh GL 357'/
'.\_ValidateAll.sh GL 359'/
'.\_ValidateAll.sh GL 361'/
'.\_ValidateAll.sh GL 363'/

insira a descrição da imagem aqui

Na verdade, quando faço um cat no diretório, não vejo as aspas simples

vmdovs@ubuntu:/mnt/out/1$ cat 
GL170/                    .\_ValidateAll.sh GL 357/ .\_ValidateAll.sh GL 390/ .\_ValidateAll.sh GL 470/ .\_ValidateAll.sh GL 570/
rename.sh                 .\_ValidateAll.sh GL 359/ .\_ValidateAll.sh GL 400/ .\_ValidateAll.sh GL 480/ .\_ValidateAll.sh GL 572/
.\_ValidateAll.sh GL 190/ .\_ValidateAll.sh GL 361/ .\_ValidateAll.sh GL 410/ .\_ValidateAll.sh GL 500/ .\_ValidateAll.sh GL 574/
.\_ValidateAll.sh GL 220/ .\_ValidateAll.sh GL 363/ .\_ValidateAll.sh GL 420/ .\_ValidateAll.sh GL 530/ .\_ValidateAll.sh GL 590/
.\_ValidateAll.sh GL 355/ .\_ValidateAll.sh GL 368/ .\_ValidateAll.sh GL 440/ .\_ValidateAll.sh GL 540/ .\_ValidateAll.sh GL 710/

Além disso, cd pode acessar o diretório da seguinte maneira

cd .\\_ValidateAll.sh\ GL\ 190/

Responder1

Se o único problema for que os diretórios estão ocultos, você pode simplesmente remover o .início do nome para torná-los reexibidos. Por exemplo, usando perl-rename (chamado renameno Ubuntu):

rename 's/^\.//' '.\_Validate'*

Ou, apenas com ferramentas shell:

for dir in '.\_Validate'*; do echo mv "$dir" "${dir//.}"; done

Porém, ambos deixam você com nomes de diretório horríveis, com espaços, barras e outras coisas desagradáveis. Já que você está renomeando, você também pode renomear para algo sensato:

rename 's/^\.\\//; s/\s+/_/g' '.\_Validate'*

Isso resultará em:

$ ls -d _*
_ValidateAll.sh_GL_100  _ValidateAll.sh_GL_107  _ValidateAll.sh_GL_114
_ValidateAll.sh_GL_101  _ValidateAll.sh_GL_108  _ValidateAll.sh_GL_115
_ValidateAll.sh_GL_102  _ValidateAll.sh_GL_109  _ValidateAll.sh_GL_116
_ValidateAll.sh_GL_103  _ValidateAll.sh_GL_110  _ValidateAll.sh_GL_117
_ValidateAll.sh_GL_104  _ValidateAll.sh_GL_111  _ValidateAll.sh_GL_118
_ValidateAll.sh_GL_105  _ValidateAll.sh_GL_112  _ValidateAll.sh_GL_119
_ValidateAll.sh_GL_106  _ValidateAll.sh_GL_113  _ValidateAll.sh_GL_120

IMPORTANTE: observe que não estou verificando colisão de nomes de arquivos. Se você renomear um deles para algo que já existe, você substituirá o arquivo existente.

Responder2

Você pode usar o GNU Paralelo:

parallel mv {} '{=s/^\.\\_//=}' ::: '.\_ValidateAll'*

Isso removerá .\_os nomes.

Para também substituir espaços por _ execute:

parallel mv {} '{=s/^\.\\_//; s/\s/_/g=}' ::: '.\_ValidateAll'*

Responder3

Em princípio (e como você provavelmente sabe), arquivos e diretórios ficam ocultos se seus nomes começarem com .. Assim, você pode torná-los "visíveis" novamente removendo esses arquivos .. Isso pode ser feito bashusando as funções integradas de manipulação de strings:

user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; mv "$dir" "$newname"; done

Seria aconselhável, no entanto, verificar se funciona corretamente, testando-o antecipadamente com

user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; echo "rename $dir to $newname"; done

Atualizar: você definitivamente deve seguir o conselho da resposta de @terdon para aproveitar a oportunidade e se livrar de todos os caracteres especiais nesse processo.

informação relacionada