Cambiar el nombre de todos los directorios ocultos creados por GNU paralelo

Cambiar el nombre de todos los directorios ocultos creados por GNU paralelo

GNU Parallel genera directorios ocultos de la siguiente manera usando el --resultsparámetro.

¿Qué comando uso en Ubuntu para cambiar todos los directorios para que ya no estén ocultos? Los directorios se llaman:

'.\_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'/

ingrese la descripción de la imagen aquí

De hecho, cuando hago un gato en el directorio, no veo las comillas 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/

También cd puede acceder al directorio de la siguiente manera

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

Respuesta1

Si el único problema es que los directorios están ocultos, puede simplemente eliminar el .desde el principio de su nombre para que se muestren. Por ejemplo, usando perl-rename (llamado renameen Ubuntu):

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

O, solo con herramientas de shell:

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

Ambos te dejan con nombres de directorio horribles, con espacios, barras y otras cosas desagradables. Ya que estás cambiando el nombre, también puedes cambiar el nombre a algo sensato:

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

Eso resultará en:

$ 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: tenga en cuenta que no estoy comprobando si hay colisiones de nombres de archivos. Si cambia el nombre de uno de estos a algo que ya existe, sobrescribirá el archivo existente.

Respuesta2

Puedes usar GNU paralelo:

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

Esto eliminará .\_los nombres.

Para reemplazar también espacios con _ ejecutar:

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

Respuesta3

En principio (y como probablemente sepas), los archivos y directorios están ocultos si su nombre comienza con .. Por lo tanto, puede volver a hacerlos "visibles" eliminando ese archivo .. Se puede hacer bashusando las funciones integradas de manipulación de cadenas:

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

Sin embargo, le recomendamos que verifique que funciona correctamente probándolo de antemano con

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

Actualizar: definitivamente deberías seguir el consejo de la respuesta de @terdon para aprovechar la oportunidad y deshacerte de todos los caracteres especiales en ese proceso.

información relacionada