2016-08-09 4 views
1

Mein SkriptWarum erkennt das Skript die Dateierweiterung nicht?

#!/bin/bash 

cp *.ats /home/milenko/procmt 

mycd() { 
    cd /home/milenko/procmt 
} 

mycd 

EXT=ats 
for i in *; do 
    if [ "${i}" != "${i%.${EXT}}" ];then 
     ./tsmp -ascii i 
    fi 
done 

Aber

[email protected]:~/Serra do Mel/MT06/meas_2016-07-13_20-22-00$ bash k1.sh 


./tsmp: handling 1 files ************************************** total input channels: 1 
the name of your file does not end with ats ... might crash soon 

main (no rda) -> can not open i for input, exit 


./tsmp: handling 1 files ************************************** total input channels: 1 
the name of your file does not end with ats ... might crash soon 

main (no rda) -> can not open i for input, exit 

Wenn ich Verzeichnis- und Listendateien procmt

[email protected]:~/procmt$ ls *.ats 
262_V01_C00_R000_TEx_BL_2048H.ats 262_V01_C00_R086_TEx_BL_4096H.ats 262_V01_C02_R000_THx_BL_2048H.ats 
262_V01_C00_R000_TEx_BL_4096H.ats 262_V01_C01_R000_TEy_BL_2048H.ats 262_V01_C03_R000_THy_BL_2048H.ats 

Was mit meinem Skript ist falsch?

+2

'./tsmp -ascii i' ist nicht' ./tsmp -ascii "$ i" '; Du erweiterst die Variable überhaupt nicht, also gibst du ihr immer 'i' als Dateinamen. 'i' ist keine Zeichenfolge, die mit' .ats' endet, also, nun, da ist dein Fehler. –

Antwort

5

Wenn ich es richtig sollte dies für Sie verstehen, arbeiten:

dest='/home/milenko/procmt' 

cp *.ats "$dest" 

cd "$dest" 

for i in *.ats; do 
    ./tsmp -ascii "$i" 
done 

Es gibt keine Notwendigkeit, eine Schleife durch alle Dateien ist, wenn Sie in .ats Dateien nur interessiert sind. Ihre mycd Funktion macht gerade cd, also können Sie das auch vermeiden.

+3

Macht '|| exit 'auf der' cd', genau wie eine showing-good-practices-Sache - wir würden nicht versuchen wollen, eine Menge './tsmp'-Befehle auszuführen, wenn es uns nicht gelungen ist, nach'/home/milenko/procmt zu cd 'aus welchem ​​Grund auch immer. –

+1

@anubhava Ja, das ist die richtige Lösung. –

+1

@CharlesDuffy: Ja, das ist ein guter Punkt, aber ich denke 'cp' wird vor' cd' fehlschlagen, wenn der Benutzer ein Berechtigungsproblem für den angegebenen Pfad hat. – anubhava

Verwandte Themen