2016-07-08 13 views
1

Ich möchte Dateien in einem Verzeichnis umbenennen, deren Namen bestimmten Suffixen entsprechen, nämlich 810 oder 814. Ich möchte, dass die neuen Namen eine Zeichenfolge enthalten, die abhängig vom Suffix ausgewählt wird (für 814, EB_ENROLL_REQ; für 810, EB_BCHG_REQ).Benennen Sie Dateien in einem Verzeichnis um; neuer Name hängt von einem Teil des alten Namens ab

Beispiele für die Eingabe von Dateinamen (alle in $source_dir) sind:

CCRD_LLX_814_20160218043477.EDI810 
CCRD_LLX_814_20160218043407.EDI814 
helloworld 
CCRD_LLX_814_20160218043487.EDI814 
test123 
files.txt 
CCRD_LLX_814_20160218043467.EDI810 

ich alle Dateien in dem Verzeichnis lesen und Umbenennen nur die Dateien, die mit 814 oder 810, den Rest zu ignorieren.

Ich habe versucht:

export search_dir=/home/test2 

declare -a myArray 
myArray[814]=EB_ENROLL_REQ 
myArray[810]=EB_BCHG_REQ 

for entry in "$search_dir"/* 
do 
    pattern=${entry: -3} 
    #if ?? 
    mv "$entry" "$entry.XHS.JOBRUNID.${myArray[$pattern]}.$entry.XHE" 
done 

aber nicht bekommen, was ich brauche.

Der Ausgabedateinamen für eine 814 Datei sollte sein, zum Beispiel:

CCRD_LLX_814_20160218043487.EDI814.XHS.JOBRUNID.EB_ENROLL_REQ.CCRD_LLX_814_20160218043487.EDI814.XHE 

Antwort

3

Try this:

declare -A myArray     # -A, not -a --- index by strings 
myArray["814"]=EB_ENROLL_REQ   # string suffixes, not numeric 
myArray["810"]=EB_BCHG_REQ 

cd "$search_dir"  # Otherwise you have to strip $search_dir out of $entry 
for entry in *81[04] # Only work on the files that end with 810 or 814 
do 
    pattern=${entry: -3}    # the string "810" or "814" 
    mv "$entry" "$entry.XHS.JOBRUNID.${myArray[$pattern]}.$entry.XHE" 
done 
+0

Ich glaube, ich mit meinem qs sagen jus Teil davon verwirrt. Die ganze Frage ist, ich möchte eine Zeichenfolge basierend auf dem Suffix 814/810 zu der umbenannten Datei hinzufügen – Rczone

+0

Ich habe meine Frage bearbeitet @cxw – Rczone

+0

@Rczone Edited - geben Sie es eine Chance! - ** Nochmals bearbeitet **, um einen Fehler zu beheben, den ich beim Testen gefunden habe. – cxw