Benennen Sie alle von GNU parallel erstellten versteckten Verzeichnisse um

Benennen Sie alle von GNU parallel erstellten versteckten Verzeichnisse um

GNU Parallel gibt versteckte Verzeichnisse mithilfe des --resultsParameters 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'/

Bildbeschreibung hier eingeben

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 renameunter 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 bashden 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.

verwandte Informationen