GNU Parallel genera directorios ocultos de la siguiente manera usando el --results
pará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'/
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 rename
en 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 bash
usando 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.