GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie benenne ich alle Dateien mit Sonderzeichen und Leerzeichen in einem Verzeichnis um?

Der -n Flag ist für

--no-act

Keine Aktion:Zeigt an, welche Dateien umbenannt worden wären.

Es ist also normal, wenn Sie keine Änderungen haben.

In Bezug auf Ihren Befehl funktioniert er bei mir:

$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test

Abhängig von Ihrer Shell müssen Sie vielleicht dem |

entkommen
$ rename -n 's/ \|\$\|@/_/g' *

Oder Sie können die […] verwenden Notation zum Gruppieren von Zeichen:

$ rename -n 's/[ @\$]/_/g' *

Du könntest es so versuchen:

for file in ./*Block*                                       
do echo mv "$file" "${file//[ ()@$]/_}"
done

Wenn Sie mit dem Ergebnis zufrieden sind, entfernen Sie echo vor mv um die Dateien tatsächlich umzubenennen.


Auf der Suche nach einem ansprechenden Skript, um Sonderzeichen sowie deutsche Sonderzeichen zu entfernen und sie durch universelle zu ersetzen, um keine nützlichen Informationen zu entfernen. Ich habe die letzte Version des Skripts aktualisiert, die einige kleinere Probleme hatte, die zu Folgendem führten:

#!/bin/bash

for file in ./*
do
  infile=`echo "${file:2}"|sed  \
         -e 's|"\"|"\\"|g' \
         -e 's| |\ |g' -e 's|!|\!|g' \
         -e 's|@|\@|g' -e 's|*|\*|g' \
         -e 's|&|\&|g' -e 's|]|\]|g' \
         -e 's|}|\}|g' -e 's|"|\"|g' \
         -e 's|,|\,|g' -e 's|?|\?|g' \
         -e 's|=|\=|g'  `
  outfileNOSPECIALS=`echo "${file:2}"|sed -e 's|[^A-Za-z0-9._-]|_|g'`
  outfileNOoe=`echo $outfileNOSPECIALS| sed -e 's|ö|oe|g'`
  outfileNOae=`echo $outfileNOoe| sed -e 's|ä|ae|g'`
  outfileNOue=`echo $outfileNOae| sed -e 's|ü|ue|g'`
  outfileNOOE=`echo $outfileNOue| sed -e 's|Ö|OE|g'`
  outfileNOAE=`echo $outfileNOOE| sed -e 's|Ä|AE|g'`
  outfileNOUE=`echo $outfileNOAE| sed -e 's|Ü|UE|g'`
  outfileNOss=`echo $outfileNOUE| sed -e 's|ß|ss|g'`
  outfile=${outfileNOss}
  if [ "$infile" != "${outfile}" ]
  then
        echo "filename changed for " $infile " in " $outfile
        mv "$infile" ${outfile}
  fi
done

exit

Ergebnis:

@don_crissti:Er macht den Hokuspokus mit dem Infile, da Linux seine eigenen Probleme mit der Behandlung von Sonderzeichen beim Verschieben des Dateinamens haben würde.


Linux
  1. Wie lösche ich alle Dateien mit einer bestimmten Erweiterung in einem bestimmten Ordner?

  2. So ändern Sie den Besitz von Dateien und Verzeichnissen mit dem Befehl chown

  3. Dateien finden und taren (mit Leerzeichen)

  4. Wie verschiebt (und überschreibt) man alle Dateien von einem Verzeichnis in ein anderes?

  5. Wie finde ich alle Dateien mit einem bestimmten übergeordneten Verzeichnis in Linux?

So finden Sie die Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen

So benennen Sie Dateien und Verzeichnisse in Linux um

So schließen Sie Dateien und Verzeichnisse mit Rsync aus

So kopieren Sie Dateien und Verzeichnisse unter Linux

Wie benenne ich Dateien mit Leerzeichen mit der Linux-Shell um?

Kann ich Dateien in einem Verzeichnis mit Vim umbenennen?