Ich gebe einen Dateinamen in meine Bash-Skript und reinigt den Namen mit sed. Einige Beispieldateien würde:Pad numerische Werte in Dateiname mit dreistelligen Wert mit sed
Test 01.txt
Test v2 01.txt
ich zurück bekommen möchten:
Test 001.txt
Test v002 001.txt
Hier ist mein Skript
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in [email protected]
do
j=`basename "$f" ".???"`
BASENAME=`basename "$f" ".???"`
DIRNAME=`dirname "$f"`
j=`echo $j |sed -e 's/\///g'`
j=`echo $j |sed -e 's/_/ /g'`
j=`echo $j |sed -e 's/^\.//'`
j=`echo $j |sed -e 's/\[[^()]*\]//g'`
j=`echo $j |sed -e 's/([^()]*)//g'`
j=`echo $j |sed -e 's/#//g'`
j=`echo $j |sed -e 's/+/\ /g'`
j=`echo $j |sed -e 's/\.\././g'`
j=`echo $j |sed -e 's/\&/and/g'`
j=`echo $j |sed -e 's/\ -/-/g'`
j=`echo $j |sed -e 's/-\ /-/g'`
j=`echo $j |sed -e 's/-{2,}/-/g'`
j=`echo $j |sed -r -e 's/\d+/sprintf("%03d",$&)/e'`
j=`echo $j |sed -e 's/\.\././g'`
j=`echo $j |sed -e "s/\'//g"`
j=`echo $j |sed -r -e 's/ {2,}/ /g'`
j=`echo $j |sed -e 's/\ \././g'`
if [ "$BASENAME" != "$j" ]; then
mv -v "$f" "$DIRNAME"/"$j"
fi
done
Hier ist das Problem Linie
j=`echo $j |sed -r -e 's/\d+/sprintf("%03d",$&)/e'`
Der Regex funktioniert mit umbenennen, aber nicht mit sed.
Die mehrzeiligen war für meine geistige Gesundheit/Debugging-Prozess. Ein Beispieldateiname wäre: Test 01.txt Ich möchte es in Test 001.txt umbenennen. – CFry
Wenn 'j' anfänglich das Ergebnis von' Basisname' ist, was ist das für: 'j = \ 'echo $ j | sed -e' s/\ /// g '\' '. Nur 'Basisname /' gibt alles aus, was einen Schrägstrich enthält. – Kaz
Diese Zeile war vor der Verwendung von Basisname. Gerade wurde noch nicht entfernt. – CFry