voulaji Δημοσ. 5 Φεβρουαρίου 2010 Δημοσ. 5 Φεβρουαρίου 2010 Ψάχνω για scripts που θα υλοποιούν τα πιο κάτω: 1.να εκτυπώνει μια λίστα μόνο με τα directories (όχι files) που βρίσκονται στο τρέχον directory (όχι στα subdirectories). 2.να εκτυπώνει μια λίστα μόνο με τα files (όχι directories) τα οποία είναι μεγαλύτερα από 10Kb και βρίσκονται στο τρέχον directory (και στα subdirectories). 3.να τυπώνει στην οθόνη τις γραμμές ενός αρχείου με τυχαίο σειρά Υπάρχει καμιά ιδέα?
macabre_sunsets Δημοσ. 5 Φεβρουαρίου 2010 Δημοσ. 5 Φεβρουαρίου 2010 1. Εκτυπώνει στην οθόνη όλα τα directory αλλά νομίζω όχι τα sub-directory >find /path/to/directory -type d -maxdepth 1 2. Εκτυπώνει στην οθόνη όλα τα αρχεία που είναι μεγαλύτερα από 10kb από όλα τα sub-directory >find /path/to/directory -type f -size +10k 3. Δεν γνωρίζω Δεν είναι δοκιμασμένες οι εντολές.
apoikos Δημοσ. 6 Φεβρουαρίου 2010 Δημοσ. 6 Φεβρουαρίου 2010 voulaji: 1 & 2: man find 3: man shuf Ας μην απαντήσει κανένας άλλος, δε θα περάσουμε και 2ο μάθημα ;-)
voulaji Δημοσ. 6 Φεβρουαρίου 2010 Μέλος Δημοσ. 6 Φεβρουαρίου 2010 Καταρχήν ευχαριστώ πολύ τον macabre_sunsets για την βοήθειά του. Όσο για τα υπόλοιπα σχόλια, δεν νομίζω οτι υπάρει μάθημα στο κόσμο που να περνιέται με 2-3 scripts!!!!!!!! Άλλωστε μια βοήθεια ζήτησα σε κάτι που δεν γνωρίζω, είναι τόοοοοοοοοοοοοοοσο εξωφρενικό?
gtroza Δημοσ. 6 Φεβρουαρίου 2010 Δημοσ. 6 Φεβρουαρίου 2010 τα ρίχνεις συνέχεια στην ψύχρα τα πόστ με τις ασκήσεις καλή επιτυχία ! .
voulaji Δημοσ. 12 Φεβρουαρίου 2010 Μέλος Δημοσ. 12 Φεβρουαρίου 2010 Για το πρώτο έχω κανει αυτό: #!/bin/bash echo "printing directory names..." ls -ap | grep "/" if [ $? -ne 0 ] then echo "exiting abnormally..." fi Δουλεύει μια χαρά, οπότε δεν νομίζω να είναι κάτι λάθος? Τώρα για τα υπόλοιπα δυο, ειλικρινά δεν μπορώ να φτιάξω κάτι σωστό. ---------- Προσθήκη στις 22:58 ---------- Προηγούμενο μήνυμα στις 22:51 ---------- Φίλε macabre_sunsets, προσπαθώ να δοκιμάσω την δική σου εκδοχή για την 2, αλλά δεν ...δουλεύει. 2. Εκτυπώνει στην οθόνη όλα τα αρχεία που είναι μεγαλύτερα από 10kb από όλα τα sub-directory >find /path/to/directory -type f -size +10k Έχεις καμιά ιδέα για το πώς μπορεί να διαφοροποιηθεί?
macabre_sunsets Δημοσ. 12 Φεβρουαρίου 2010 Δημοσ. 12 Φεβρουαρίου 2010 Δηλαδή δεν εμφανίζει τα αρχεία που βρίσκονται στο parent directory και εμφανίζει μόνο αυτά από τα sub-directory?
firewalker Δημοσ. 12 Φεβρουαρίου 2010 Δημοσ. 12 Φεβρουαρίου 2010 [/color]Φίλε macabre_sunsets, προσπαθώ να δοκιμάσω την δική σου εκδοχή για την 2, αλλά δεν ...δουλεύει. 2. Εκτυπώνει στην οθόνη όλα τα αρχεία που είναι μεγαλύτερα από 10kb από όλα τα sub-directory >find /path/to/directory -type f -size +10k Έχεις καμιά ιδέα για το πώς μπορεί να διαφοροποιηθεί? Μελέτησε το παρακάτω. http://unixhelp.ed.ac.uk/CGI/man-cgi?find
voulaji Δημοσ. 12 Φεβρουαρίου 2010 Μέλος Δημοσ. 12 Φεβρουαρίου 2010 Καταρχήν συμφωνούμε ολοι ότι το πρώτο είναι σωστο? Ή μήπως υπάρχει πιο εύκολη λύση, όπως αυτη που προτείνει ο macabre_sunsets? Για το δεύτερο, μπορώ να πώ ότι η πρόταση του macabre_sunsets με βρίσκει σύμφωνη αλλά νομίζω πως σαν λύση θα πρέπει να είναι κατι πιο κομψό. Σε ότι αφορά το τρίτο, δεν έχω καμια άποψη γιατί μου φαίνεται πολύ δύσκολο.
firewalker Δημοσ. 12 Φεβρουαρίου 2010 Δημοσ. 12 Φεβρουαρίου 2010 Το πρώτο εγώ θα το έκανα: > #!/bin/bash ls -d -1 */ ή > #!/bin/bash ls -l |grep "^d" Όλα τα παραπάνω έχουν πάνω από μία λύσεις. Το θέμα είναι πως θέλεις να υλοποιήσεις κάτι. Αν έχεις περιορισμούς σε κάτι. Μπορεί για παράδειγμα να σου έλεγαν τύπωσε όλα τα αρχεία και όχι καταλόγους κάνοντας χρήση μόνο των built-in εντολών του bash.
voulaji Δημοσ. 13 Φεβρουαρίου 2010 Μέλος Δημοσ. 13 Φεβρουαρίου 2010 Επανέρχομαι δριμυτερη......... 1-> Οι γενικές παρατηρησεις που έχουμε, ειναι: α) Είναι υποχρεωτική η χρήση του bash ως shell β) κάθε script θα πρέπει να είναι ευανάγνωστο (π.χ. σωστή ονοματολογία, στοίχιση) και ξεκάθαρο στη σχεδίαση (όχι περίεργη σύνταξη/εντολές, σχολιασμός μόνο όταν είναι απολύτως απαραίτητο). 2-> Φίλε firewalker, αν υιοθετήσω τον δικό σου τρόπο, θα πρέπει να βγάλω το if? Ή τέλος πάντων, πώς θα είναι στην τελική του μορφή αυτό που εσύ προτείνεις? 3-> Σε ότι αφορά το 3, εχω κάνει κατι, με βασικες εντολές τις πιο κατω: ... if [ $# -gt 1 ] ; ... if [ "$?" = "1" ] ; ... if [ -s $1 -a -r $1 ] ; Δεν το έχω ολοκληρώσει όμως.
firewalker Δημοσ. 13 Φεβρουαρίου 2010 Δημοσ. 13 Φεβρουαρίου 2010 Εγώ για παράδειγμα στον εντοπισμό αρχείων θα έκανα το παρακάτω. > #!/bin/bash for FILE in *; do if [ -f $FILE ]; then echo $FILE fi done Για τα directories αντίστοιχα: > #!/bin/bash for FILE in *; do if [ -d $FILE ]; then echo $FILE fi done
voulaji Δημοσ. 14 Φεβρουαρίου 2010 Μέλος Δημοσ. 14 Φεβρουαρίου 2010 Φίλε firewalker σε ευχαριστώ (όπως και όλους τους άλλους) για τη συμμετοχή, αλλά νομίζω ότι με μπέρδεωψες περισσότερο. Καταρχήν, οι δυο κώδικες που έγραψες είναι για το πρώτο ζήτημα? Δεύτερον, οι γενικοί περιορισμοί είναι σεβαστοί σε αυτο το κώδικα ? Τρίτον, για το ζήτημα με τα 10 Κb, υπάρχει καμιά ιδέα? Έχω μπλοκάρει σε αυτό κ δε μπορώ να σκεφτώ κάτι.
firewalker Δημοσ. 15 Φεβρουαρίου 2010 Δημοσ. 15 Φεβρουαρίου 2010 Λοιπόν... Για το 1: > #!/bin/bash for FILE in *; do #Βρόχος for για την εύρεση όλων των περιεχομένων. if [ -d $FILE ]; then #Έλεγχος για τον εντοπισμό φακέλου. echo $FILE #Αν ο παραπάνω έλεγχος είναι αληθής τύπωσε το όνομα του φακέλου. fi done exit 0 Για το 2: > #!/bin/bash for FILE in *; do #Βρόχος for για την εύρεση όλων των περιεχομένων if [ -f $FILE ]; then #Έλεγχος για τον εντοπισμό αρχείων. file_size=$(stat -c %s $FILE) #Υπολογισμός του μεγέθους με την εντολή stat(1). if [ "$file_size" -gt 10240 ]; then #Έλεγχος αν το μέγεθος του αρχείου είναι μεγαλύτερο από 10k. echo $FILE #Aν ο έλεγχος είναι αληθής τύπωσε το όνομα του αρχείου. fi fi done exit 0 Εντολή stat(1). Για το 3: > #!/bin/bash echo "Δώσε το όνομα του αρχείου" read file_name echo "Τύπωμα των σειρών με τυχαία σειρά:" echo shuf $filename exit 0 Εντολή shuf(1). Στο 3 μπορείς να υλοποιήσεις και κάποιον έλεγχο για την ύπαρξη του αρχείου. Επίσης θα μπορούσες να το κάνεις να παίρνει το όνομα του αρχείου σαν όρισμα.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.