tr3quart1sta Δημοσ. 23 Μαρτίου 2013 Δημοσ. 23 Μαρτίου 2013 "I need to delete all files in a directory, but exclude some of them. For example, in a directory with the files a b c ... z, I need to delete all except for u and p. Is there an easy way to do this?" "Type rm *, then I press Ctrl + xand * to expand * into all visible file names.Then I can just remove the two files I like to keep from the list and finally execute the command line." Το Ctrl+x δεν εχω καταλαβει τι ακριβως κανει, γιατι το βλεπω παντα σε συνδυασμο με κατι αλλο. Ξερει κανεις?
imitheos Δημοσ. 23 Μαρτίου 2013 Δημοσ. 23 Μαρτίου 2013 rm *, then I pressCtrl + xand*to expand * into all visible file names. Then I can just remove the two files I like to keep from the list and finally execute the command line." Το Ctrl+x δεν εχω καταλαβει τι ακριβως κανει, γιατι το βλεπω παντα σε συνδυασμο με κατι αλλο. Ξερει κανεις? Ανάλογα με το συνδυασμό που βλέπεις κάνει και κάποια εργασία. Αν τρέξεις "man bash" και ψάξεις για "C-x" θα δεις πολλούς συνδυασμούς και σε τι function είναι bind ο κάθε συνδυασμός. Ο συνδυασμός του Control + X και μετά αστερίσκος είναι bind στην συνάρτηση glob-expand-word που κάνει δηλαδή επέκταση αρχείων στο κείμενο που βρίσκεται πριν από τον δρομέα. Στην προκειμένη περίπτωση, έχεις γράψει "rm *" οπότε το pattern πάνω στο οποίο καλείται να τρέξει η συνάρτηση είναι ο αστερίσκος. Έτσι θα κάνει επέκταση και θα εμφανίσει στην γραμμή εντολών όλα τα αρχεία δηλαδή η γραμμή εντολών θα γίνει "rm αρχείο1 αρχείο2 κτλ" οπότε πηγαίνεις τον δρομέα στο αρχείο που δεν θέλεις να διαγραφεί και σβήνεις το όνομά του από τη γραμμή εντολών. Έτσι η rm θα λάβει ως ορίσματα μόνο τα αρχεία που θέλεις.
tr3quart1sta Δημοσ. 24 Μαρτίου 2013 Δημοσ. 24 Μαρτίου 2013 Ανάλογα με το συνδυασμό που βλέπεις κάνει και κάποια εργασία. Αν τρέξεις "man bash" και ψάξεις για "C-x" θα δεις πολλούς συνδυασμούς και σε τι function είναι bind ο κάθε συνδυασμός. Ο συνδυασμός του Control + X και μετά αστερίσκος είναι bind στην συνάρτηση glob-expand-word που κάνει δηλαδή επέκταση αρχείων στο κείμενο που βρίσκεται πριν από τον δρομέα. Στην προκειμένη περίπτωση, έχεις γράψει "rm *" οπότε το pattern πάνω στο οποίο καλείται να τρέξει η συνάρτηση είναι ο αστερίσκος. Έτσι θα κάνει επέκταση και θα εμφανίσει στην γραμμή εντολών όλα τα αρχεία δηλαδή η γραμμή εντολών θα γίνει "rm αρχείο1 αρχείο2 κτλ" οπότε πηγαίνεις τον δρομέα στο αρχείο που δεν θέλεις να διαγραφεί και σβήνεις το όνομά του από τη γραμμή εντολών. Έτσι η rm θα λάβει ως ορίσματα μόνο τα αρχεία που θέλεις. sorry, δεν την εγραψα καλα την ερωτηση.. το παραπανω παραδειγμα ειναι μια ωραια χρηση που βρηκα (ασχετο), καταλαβα τι κανει με το * το ερωτημα ειναι τι κανει το C-x "σκέτο", χωρις συνδυασμό δλδ..??
mad-proffessor Δημοσ. 25 Απριλίου 2013 Δημοσ. 25 Απριλίου 2013 (επεξεργασμένο) bashers αυτό δουλευει sudo find /path/to/dir -name '*.php' -type f -print0 | xargs -0 sed -i 's/name/sadsadasd/g' αλλά πως θα γίνει να δουλέψει κ αυτό: sudo find /path/to/dir -name '*.php' -type f -print0 | xargs -0 sed -i 's/['name']/['sFp5Nm4a3']/g' δοκίμασα να κάνω escape τα quotes με backslashes αλλά δεν π.x ...... sed -i 's/['\''name'\'']/['\''blabla'\'']/g' ουτε awk με gsub και octal escaping που είδα κάπου στο net δούλεψε solved με sed -i 's/\['\''name'\''\]/\['\''blabla'\''\]/g' Επεξ/σία 25 Απριλίου 2013 από mad-proffessor
tritonas00 Δημοσ. 8 Μαΐου 2013 Δημοσ. 8 Μαΐου 2013 Ενα pattern που να βρισκει md[μονο νουμερα εως 3 ψηφιο αριθμο] ? αυτο δουλευει: find /dev -name md[0-9] -o -name md[0-9][0-9] -o -name md[0-9][0-9][0-9] απλα αν γινεται να γραφτει καλυτερα με ενα pattern και οχι 3 (θελω να κρατησω την find)
imitheos Δημοσ. 8 Μαΐου 2013 Δημοσ. 8 Μαΐου 2013 Ενα pattern που να βρισκει md[μονο νουμερα εως 3 ψηφιο αριθμο] ? αυτο δουλευει: find /dev -name md[0-9] -o -name md[0-9][0-9] -o -name md[0-9][0-9][0-9]απλα αν γινεται να γραφτει καλυτερα με ενα pattern και οχι 3 (θελω να κρατησω την find) find /dev -regex "/dev/md[0-9]+" Το [0-9] δηλώνει το κλασικό range των ψηφίων όπως το έχεις και εσύ. Ο + κάνει match το προηγούμενο pattern όσες φορές να ναι αλλά τουλάχιστον μία φορά οπότε ο συνδυασμός των δύο θα κάνει match μόνο ψηφία όσες φορές και αν υπάρχουν αυτά. Edit: Δεν νομίζω να πηγαίνουν πάνω από τριψήφιο οι md devices οπότε και το γενικό match με το + που έδωσα θα πρέπει να παίζει σωστά. Αν παρόλα αυτά θέλεις να το περιορίσεις, μπορείς να χρησιμοποιήσεις κάτι σαν το παρακάτω. find /dev -regextype posix-extended -regex "/dev/md[0-9]{1,3}" 2
warlock9_0 Δημοσ. 11 Αυγούστου 2013 Δημοσ. 11 Αυγούστου 2013 έχω αυτό το script για να κάνω backup #!/bin/bash IFS=$'\n' data="/media/disk320GB/programming /media/disk320GB/My Pictures /media/disk320GB/My Music /media/disk320GB/icedove" title="rsync backup" service='' dest="[email protected]:/media/disk2TB/desktop-backup/" ok="/usr/share/icons/oxygen/64x64/actions/dialog-ok-apply.png" error="/usr/share/icons/oxygen/64x64/status/dialog-error.png" info="/usr/share/icons/oxygen/64x64/status/dialog-information.png" notify-send $title "Data sync started" -t 3000 -i $info sleep 5 for line in $data; do rsync -azvr --delete -e "ssh -p 2324" $line $dest >> /tmp/rsync-backup.log && notify-send $title "$line synced" -t 3000 -i $ok || notify-send $title "$line sync failed" -t 3000 -i $error sleep 5 done notify-send $title "Data sync finished" -t 3000 -i $info το βάζω να τρέχει με anacron δεν παίζει όμως το notify send, και μου φαίνεται οτι μάλλον κάτι γίνεται με την DISPLAY το τρέχω έτσι env DISPLAY=:0 /media/disk320GB/programming/bash/rsync-backup.sh μήπως την πάρει αλλά τίποτα κατα τα άλλα backup κάνει κανονικά τι να κάνω για να παίξει άραγε?
tritonas00 Δημοσ. 11 Αυγούστου 2013 Δημοσ. 11 Αυγούστου 2013 Θελω να κανω sort by path ενα array: BRcustomparts=(/var/tmp=/dev/sdxx /var=/dev/sdxx /var/tmp/mpt=/dev/sdxx) Το προβλημα μου ειναι οτι η sort σε arch τα βγαζει αναποδα ενω σε debian σωστα (λογω διαφορετικης εκδοσης μαλλον ?) sorted=($(for i in ${BRcustomparts[@]}; do echo $i; done | sort)) echo ${sorted[@]} σε arch παιρνω: /var/tmp/mpt=/dev/sdxx /var/tmp=/dev/sdxx /var=/dev/sdxx ενω σε debian: /var=/dev/sdxx /var/tmp=/dev/sdxx /var/tmp/mpt=/dev/sdxx που ειναι αυτο που θελω. Καποιος αλλος τροπος υπαρχει που να δουλευει σωστα παντου ? (δεν θελω να κανω -r κλπ)
imitheos Δημοσ. 11 Αυγούστου 2013 Δημοσ. 11 Αυγούστου 2013 Θελω να κανω sort by path ενα array: BRcustomparts=(/var/tmp=/dev/sdxx /var=/dev/sdxx /var/tmp/mpt=/dev/sdxx) Το προβλημα μου ειναι οτι η sort σε arch τα βγαζει αναποδα ενω σε debian σωστα (λογω διαφορετικης εκδοσης μαλλον ?) sorted=($(for i in ${BRcustomparts[@]}; do echo $i; done | sort)) echo ${sorted[@]}σε arch παιρνω: /var/tmp/mpt=/dev/sdxx /var/tmp=/dev/sdxx /var=/dev/sdxx ενω σε debian: /var=/dev/sdxx /var/tmp=/dev/sdxx /var/tmp/mpt=/dev/sdxx που ειναι αυτο που θελω. Καποιος αλλος τροπος υπαρχει που να δουλευει σωστα παντου ? (δεν θελω να κανω -r κλπ) Μπορείς να τρέξεις locale και να δεις τι χρησιμοποιεί η κάθε διανομή ? Με οποιοδήποτε locale πέραν του βασικού % export LC_COLLATE=en_US (ή el_GR ή el_GR.UTF-8 ή οτιδήποτε) % for i in ${BRcustomparts[@]}; do echo $i done|sort /var=/dev/sdxx /var/tmp=/dev/sdxx /var/tmp/mpt=/dev/sdxx Με το βασικό locale % export LC_COLLATE=C (ή LC_COLLATE=POSIX ή unset LC_COLLATE) % for i in ${BRcustomparts[@]}; do echo $i done|sort /var/tmp/mpt=/dev/sdxx /var/tmp=/dev/sdxx /var=/dev/sdxx 2
tritonas00 Δημοσ. 11 Αυγούστου 2013 Δημοσ. 11 Αυγούστου 2013 στο arch εχω: LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE=C LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= οντως αν δωσω unset LC_COLLATE το βγαζει κανονικα Thanks!
imitheos Δημοσ. 11 Αυγούστου 2013 Δημοσ. 11 Αυγούστου 2013 στο arch εχω: οντως αν δωσω unset LC_COLLATE το βγαζει κανονικα Thanks! Οποτεδήποτε βλέπεις σε sort κάτι που δεν περίμενες 99% φταίει η LC_COLLATE. 1
tritonas00 Δημοσ. 12 Αυγούστου 2013 Δημοσ. 12 Αυγούστου 2013 χμμ παλι κανει οτι θελει BRcustomparts=(/var/cache=/dev/sdxx /var=/dev/sdxx /var/cache/pacman=/dev/sdxx) μου βγαζει και στις 2 διανομες με unset LC_COLLATE: /var/cache=/dev/sdxx /var/cache/pacman=/dev/sdxx /var=/dev/sdxx χωρις unset LC_COLLATE μου τα βγαζει sorted αλλα αναποδα: /var/cache/pacman=/dev/sdxx /var/cache=/dev/sdxx /var=/dev/sdxx Αν βγαλω το = και οτι εχει μετα, τα βγαζει κανονικα χωρις να πειραξω την LC_COLLATE. Υπαρχει τροπος να πω στην sort να αγνοει αυτο το μερος (=/dev/sdxx) ?
imitheos Δημοσ. 12 Αυγούστου 2013 Δημοσ. 12 Αυγούστου 2013 χμμ παλι κανει οτι θελει BRcustomparts=(/var/cache=/dev/sdxx /var=/dev/sdxx /var/cache/pacman=/dev/sdxx) μου βγαζει και στις 2 διανομες με unset LC_COLLATE: /var/cache=/dev/sdxx /var/cache/pacman=/dev/sdxx /var=/dev/sdxxχωρις unset LC_COLLATE μου τα βγαζει sorted αλλα αναποδα: /var/cache/pacman=/dev/sdxx /var/cache=/dev/sdxx /var=/dev/sdxx Αν βγαλω το = και οτι εχει μετα, τα βγαζει κανονικα χωρις να πειραξω την LC_COLLATE. Υπαρχει τροπος να πω στην sort να αγνοει αυτο το μερος (=/dev/sdxx) ? Ναι το συγκεκριμένο και εμένα μου το βγάζει έτσι ανεξαρτήτως LC_COLLATE. Γενικά πάντως να επιβεβαιώνεις με locale ότι έγινε η αλλαγή. Μπορεί για παράδειγμα αν είναι ενεργοποιημένη η LC_ALL, το unset LC_COLLATE να μην έχει αποτέλεσμα γιατί παίρνει την τιμή της LC_ALL. Για τους κανόνες collation της glibc υπάρχουν bugs για πολλά χρόνια αλλά δεν ξέρω γιατί δεν φτιάχνονται. Παλιά θυμάμαι είχε γίνει ντόρος για κάτι στα Ελληνικά αλλά δεν μπορούσε να αλλάξει γιατί έτσι το όριζε το Unicode ή κάτι τέτοιο δεν θυμάμαι. Δες τι παίρνω στο repository του Slackware. με LC_COLLATE=C % find | sort ./PACKAGES.TXT ./a/openssl-solibs-1.0.1e-x86_64-1.txz ./a/patch-2.7-x86_64-2.txz ./ap/a2ps-4.14-x86_64-5.txz ./n/zd1211-firmware-1.4-fw-1.txz με LC_COLLATE=el_GR.UTF-8 ή οποιοδήποτε άλλο εκτός C, POSIX % find | sort ./a/openssl-solibs-1.0.1e-x86_64-1.txz ./ap/a2ps-4.14-x86_64-5.txz ./a/patch-2.7-x86_64-2.txz ./n/zd1211-firmware-1.4-fw-1.txz ./PACKAGES.TXT Χωρίς να είμαι σίγουρος, από όσες φορές έχω χρησιμοποιήσει την sort, έχω σχηματίσει την εντύπωση ότι στα locale πέραν του βασικού ισχύουν κάποιοι κανόνες που δεν περιμένουμε όπως τα κεφαλαία και τα μικρά να έχουν ίδια προτεραιότητα και να μη λαμβάνονται υπ' όψιν κάποιοι χαρακτήρες όπως πχ ο /. Αν αφαιρέσουμε τον /, τότε apa2 (ap/a2ps) είναι όντως πιο μπροστά από το apat (a/patch). Το ίδιο ίσως να γίνεται και σε σένα. /var/cache=/dev/sdxx /var/cache/pacman=/dev/sdxx /var=/dev/sdxx Αν δούμε το παραπάνω ως /varcachedevsdxx /varcachepacmandevsdxx /vardevsdxx η ταξινόμηση είναι σωστή. Δεν ξέρω τι παίζει και πώς λύνεται. Δεν σε βολεύει να έχεις τον πίνακα χωρίς το =/dev/sdxx και να το κάνεις append αφού κάνεις την ταξινόμηση ?
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα