2017-03-16 3 views
0

Ich habe eine Vorlagendatei, die ich verwende, um PBS-Jobs an einen Server zu senden. Ich muss n Anzahl der Kopien dieser Vorlage machen. Letztendlich würde ich gerne den folgenden Befehl oder ähnliches eingeben:Bash Script, um n Dateien zu kopieren und sequenziell umzubenennen

copy n pbs_template 

Ich möchte die neu gemacht doppelte Dateien benannt werden:

pbs_template_1 
pbs_template_2 
pbs_template_3 
pbs_template_4 
pbs_template_n.... 

Das folgende ist, was ich bisher haben ...

function copy() { 
    INPUT=pbs_template 
    number=$1 
    shift 

    for n in $(seq $number); do 
    cp "$INPUT" "$INPUT" 
    done 
} 

Offensichtlich muss ich den Namen meiner Ausgabe spezifizieren (sonst bekomme ich folgende Fehler cp: pbs_template and pbs_template are identical (not copied)), aber wie kann ich sie Nummer sequentiell n mal?

Antwort

1

Versuchen Sie etwas wie das?

function duplicate() { 
    for i in $(seq 1 $2) 
    do 
     cp $1 "$1_$i" 
     echo "Made copy '$1_$i'" 
    done 

} 

Sie nennen es so duplicate foo.txt 10. Es wird 10 Kopien von foo.txt mit jeweils einem numerischen Suffix erstellen. Bei diesem Aufruf wird $1foo.txt und $2 wird 10 sein.

+0

Vielleicht nehmen Sie das anstößige 'Echo' heraus, oder lassen Sie es zumindest auf Standardfehler drucken. – tripleee

+0

Natürlich. Es ist eine grobe Dokumentation, die dem OP hilft zu verstehen, was vor sich geht. –

0

ändern Sie einfach Ihre Erklärung dazu

cp -p "$INPUT" "$INPUT"_${n} 

hier i -p Schalter verwendet, um haben Attribute Datei zu erhalten. Wenn Sie nicht wollen, ignorieren Sie einfach -p Schalter.

Hoffnung, das hilft.

Verwandte Themen