Umbenennen der Datei (.filename) in den Originalnamen

Umbenennen der Datei (.filename) in den Originalnamen

Ich versuche, eine Änderung rückgängig zu machen, die ich über vorgenommen habe rename.

Ich habe Dateien in einem Unterordner umbenannt und dann gedankenlos versucht, die ..Originalnamen mit folgendem Befehl zu löschen:

rename "s/.././" *

Jetzt habe ich einen Ordner mit 600 Dateien, wobei die ersten beiden Buchstaben jedes Dateinamens geändert wurden in.zzyGir*

Gibt es eine Möglichkeit, die "." wieder in die Anfangsbuchstaben jedes Dateinamens zu ändern, ohne die ganze Datei zu verlieren?

Ich habe verschiedene Dinge ohne Erfolg ausprobiert, zum Beispiel:

rename "s/./Di/; *

Ich bin auch für Lösungen offen, bei denen jeweils nur eine Datei auf einmal gelöscht wird. Mein Hauptziel besteht darin, den Verlust der Dateien zu vermeiden.

Antwort1

Die ersten beiden Buchstaben sind Geschichte. Keine Chance, sie zurückzubekommen. Aber Sie können die Dateien umbenennen, um die führenden Buchstaben .mit dem folgenden Verfahren zu entfernen

Stellen Sie sicher, dass Sie bashin einem Terminal

bash

Gehen Sie in Ihren Ordner mit den falschen Dateinamen

shopt -s dotglob
rename -n 's/^\./Di/' *

Wenn alles gut aussieht

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

Enden mit

shopt -u dotglob

Erläuterung

  • rename -n "s/^\./Di/" *

    • -n

      Keine Aktion: Namen der umzubenennenden Dateien drucken, aber nicht umbenennen.

    • /^\./

      • ^Position am Anfang der Zeichenfolge behaupten

      • \..entspricht wörtlich dem Charakter

  • shopt -s dotglobundshopt -u dotglob

    • shopt

      shopt [-pqsu] [-o] [optname …]
      

      Schalten Sie die Werte der Einstellungen um, die das optionale Shell-Verhalten steuern.

    • -s

      Aktivieren (festlegen) Sie jeden Optionsnamen.

    • -u

      Deaktivieren (aufheben) Sie jeden Optionsnamen.

    • dotglob

      Wenn festgelegt, schließt Bash Dateinamen, die mit einem beginnen, .in die Ergebnisse der Dateinamenerweiterung ein.


Beispiel

$ ls -oag
total 88
drwxrwxr-x   2  4096 Jul 17 17:16 .
drwxr-xr-x 226 86016 Jul 17 17:13 ..
-rw-rw-r--   1     0 Jul 17 17:16 .foo

$ rename "s/^\./Di/" *

$ ls -oag
total 88
drwxrwxr-x   2  4096 Jul 17 17:16 .
drwxr-xr-x 226 86016 Jul 17 17:13 ..
-rw-rw-r--   1     0 Jul 17 17:16 Difoo

Ich bin nicht sicher, was du damit meinst

Gibt es eine Möglichkeit, den "." wieder in die Anfangsbuchstaben jedes Dateinamens zu ändern?

Meinst du so etwas?

.zzyGir->zzzzGir

Wenn ja, verwenden Sie diese Befehle in einer Bash:

shopt -s dotglob
rename -n 's/^\.(..)(.*)/$1$1$2/' *

Überprüfen Sie die Ergebnisse und benennen Sie sie mit

rename 's/^\.(..)(.*)/$1$1$2/' *

Und endlich wieder

shopt -s dotglob

Antwort2

So wie ich es verstehe, haben Sie einen Ordner mit Dateien wie den folgenden:

ls -la

drwxrwxr-x 2 ron ron 4096 Jul 17 20:50 .
drwxrwxr-x 3 ron ron 4096 Jul 17 20:47 ..
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .abc
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .Gyr
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .hig123
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .zyz

und Sie möchten es .aus allen Dateinamen entfernen, um es zu erstellen:

abc
Gyr
hig123
zyz

Hierfür können Sie findFolgendes verwenden rename:

find . ! -path . -type f -name ".*" -exec rename -n "s/.\/.//" {} \;

Der obige Befehl (also mit dem -n) ist ein Probelauf:

find . ! -path . -type f -name ".*" -exec rename -n "s/.\/.//" {} \;
rename(./.zyz, zyz)
rename(./.abc, abc)
rename(./.Gyr, Gyr)
rename(./.hig123, hig123)

Führen Sie es aus, ohne -ndie Dateinamen tatsächlich zu ändern:

find . ! -path . -type f -name ".*" -exec rename "s/.\/.//" {} \;
ls -la
total 8   
drwxrwxr-x 2 ron ron 4096 Jul 17 20:59 .
drwxrwxr-x 3 ron ron 4096 Jul 17 20:47 ..
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 abc
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 Gyr
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 hig123
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 zyz

verwandte Informationen