GNU Parallel gibt versteckte Verzeichnisse mithilfe des --results
Parameters wie folgt aus.
Mit welchem Befehl ändere ich unter Ubuntu alle Verzeichnisse, damit sie nicht mehr versteckt sind? Die Verzeichnisse heißen:
'.\_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'/
Wenn ich eine Katze im Verzeichnis mache, sehe ich die einfachen Anführungszeichen nicht
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/
Außerdem kann cd wie folgt auf das Verzeichnis zugreifen
cd .\\_ValidateAll.sh\ GL\ 190/
Antwort1
Wenn das einzige Problem darin besteht, dass die Verzeichnisse versteckt sind, können Sie einfach das .
am Anfang ihres Namens entfernen, um sie sichtbar zu machen. Verwenden Sie beispielsweise perl-rename (wird rename
unter Ubuntu aufgerufen):
rename 's/^\.//' '.\_Validate'*
Oder nur mit Shell-Tools:
for dir in '.\_Validate'*; do echo mv "$dir" "${dir//.}"; done
Beides hinterlässt jedoch schreckliche Verzeichnisnamen mit Leerzeichen, Schrägstrichen und anderen unappetitlichen Dingen. Da Sie umbenennen, können Sie auch gleich etwas Vernünftiges verwenden:
rename 's/^\.\\//; s/\s+/_/g' '.\_Validate'*
Das Ergebnis wird sein:
$ 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
WICHTIG: Beachten Sie, dass ich nicht auf Dateinamenkollisionen prüfe. Wenn Sie eine dieser Dateien in einen bereits vorhandenen Namen umbenennen, überschreiben Sie die vorhandene Datei.
Antwort2
Sie können GNU Parallel verwenden:
parallel mv {} '{=s/^\.\\_//=}' ::: '.\_ValidateAll'*
Dadurch werden .\_
die Namen entfernt.
Um auch Leerzeichen durch _ zu ersetzen, führen Sie Folgendes aus:
parallel mv {} '{=s/^\.\\_//; s/\s/_/g=}' ::: '.\_ValidateAll'*
Antwort3
Im Prinzip (und wie Sie wahrscheinlich wissen) sind Dateien und Verzeichnisse versteckt, wenn ihr Name mit einem beginnt .
. Sie können sie also wieder „sichtbar“ machen, indem Sie dieses entfernen .
. Dies können Sie mit bash
den integrierten Funktionen zur String-Manipulation tun:
user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; mv "$dir" "$newname"; done
Sie sollten jedoch vorab die korrekte Funktion überprüfen, indem Sie es mit
user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; echo "rename $dir to $newname"; done
Aktualisieren: Sie sollten unbedingt den Rat in der Antwort von @terdon befolgen, um die Gelegenheit zu nutzen und dabei alle Sonderzeichen zu entfernen.