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

Extrahieren von Namen aus Dateinamen in Bash?

Ich habe ein Verzeichnis mit Tausenden von Dateien im Format NachnameVornameJJJJMMTT.pdf. Nachname und Vorname werden immer in Großbuchstaben geschrieben.

Ich möchte den Nachnamen extrahieren, damit ich diese Dateien in eine Verzeichnisstruktur von {erster Buchstabe des Nachnamens}/Nachname/vollständiger Dateiname verschieben kann. Beispiel:DoeJohn20190327 würde nach D/Doe/DoeJohn20190327 verschoben

Akzeptierte Antwort:

Hier haben Sie eine Lösung. Ich habe es getestet und es erstellt die Ordner, wie Sie es erklärt haben.

for filename in *.pdf
do
  echo "Processing file $filename "
  first_letter="${filename:0:1}"
  mkdir -p $first_letter #if already exists won't print error
  last_name=$(echo $filename | sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g'  |awk '{print $1}')
  mkdir -p $first_letter/$last_name
  mv $filename $first_letter/$last_name
done

Ubuntu
  1. Festlegen von Shell-Umgebungsvariablen | BASH-Shell

  2. Verhindern, dass ein Bash-Skript gleichzeitig ausgeführt wird

  3. Bash-Skripte beim Betreten eines Verzeichnisses ausführen?

  4. Bash Dynamische (Variable) Variablennamen?

  5. Wie schließe ich einige Dateien vom Dateinamenerweiterungsmechanismus in Bash aus?

Bash Break:So verlassen Sie eine Schleife

apachectl von bash starten

Extrahieren von Daten aus einer HTML-Tabelle

Verzeichnis aus Dateiname erstellen und Bash verschieben

wie man x filename.a in ein anderes Verzeichnis kopiert

Wie extrahiert man den Dateinamen ohne die Erweiterung aus einem vollständigen Pfad?