bnvdarklord Δημοσ. 17 Ιανουαρίου 2010 Δημοσ. 17 Ιανουαρίου 2010 Σορυ αν ο τίτλος ειναι λίγο ασαφής, αλλα δεν ειμαι σίγουρος πως να περιγράψω το πρόβλημα μου ... Λοιπον εχω τον εξής κώδικα που υποτιθεται τοποθετεί ολα τα αρχεία ενος καταλόγου σε καταλόγους με ονοματα A,B,C κτλ ανάλογα με το πρώτο γραμμα του καθε αρχείου. > for f in * do if [ ! -d $f ]; then letter=`ls $f | cut -c1,1 | tr [a-z] [A-Z]` if [ -d $letter ]; then mv $f $letter else mkdir $letter mv $f $letter fi fi done Το θεμα ειναι οτι βγάζει διαφορα σφάλματα μετα την 2η φορα εκτελεσης του for, σχετικά με τις mv και tr. Δοκιμασα να βάλω ενα echo $letter πριν το εσωτερικό if, και διαπίστωσα ότι μετα την 2η φορα το letter δεν παιρνει τιμες ... Αν αφαιρέσω το εσωτερικο if παιρνει σωστά ολες τις τιμές που πρέπει... Τι κανω λαθος ;
computeras13 Δημοσ. 17 Ιανουαρίου 2010 Δημοσ. 17 Ιανουαρίου 2010 Δοκίμασε να βάλεις τις μεταβλητές σου μέσα σε " ". Μπορείς να έχεις το κλασικό πρόβλημα με τα κενά στα ονόματα των αρχείων.
bnvdarklord Δημοσ. 18 Ιανουαρίου 2010 Μέλος Δημοσ. 18 Ιανουαρίου 2010 mv: missing destination file operand after `new' Try `mv --help' for more information. tr: extra operand `A' Try `tr --help' for more information. Και αυτό το βγάζει για όλα τα αρχεία μετα τα 2 πρώτα.
C6WGMN Δημοσ. 18 Ιανουαρίου 2010 Δημοσ. 18 Ιανουαρίου 2010 > #!/bin/bash me=`basename $0` for f in * do if [ $me != $f ] then mkdir -p ${f:0:1} mv $f ${f:0:1} fi done
bnvdarklord Δημοσ. 18 Ιανουαρίου 2010 Μέλος Δημοσ. 18 Ιανουαρίου 2010 Ωραια, αυτός ο κώδικας δουλεύει... Ξερεις γιατι ομως δεν δουλευε το δικό μου?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.