Τα πάντα για το Bash...

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό fkol k4 » 20 Δεκ 2013, 11:16

lepidas έγραψε:Καλημερες :) πρεπει να πεις τι διαφορετικο περιμενεις να εχουν τα 2 τελευταια αρχεια σε σχεση με τα πρωτα

Αν εννοείς διαφορετικό σε περιεχόμενο, μπορεί τίποτα ή τα πάντα, εξαρτάται από την περίσταση....
Αν εννοείς τη μορφή του ονόματος του αρχείου, έχουν τη μορφή
Κώδικας: Επιλογή όλων
name_pattern-number.ext

Για παράδειγμα, file-backup-01.bak, file-backup-02.bak, file-backup-03.bak, file-backup-04.bak, file-backup-05.bak, file-backup-06.bak και ούτω καθ' εξής...

Ή, family_photo-2013-12-01.jpg, family_photo-2013-12-02.jpg, family_photo-2013-12-03.jpg, family_photo-2013-12-04.jpg, family_photo-2013-12-05.jpg, family_photo-2013-12-05.jpg και ούτω καθ' εξής...

Αυτό που θέλω να κάνω είναι απλά να εξαιρεθούν από μια εντολή διαγραφής (ή και οποιασδήποτε άλλης επεξεργασίας) τα αρχεία που φιλτράρονται από την
Κώδικας: Επιλογή όλων
$(command)| tail -n x
Γνώσεις: Linux: ★★★☆☆ Προγραμματισμός: ★☆☆☆☆ Αγγλικά: ★★★★★
Η υπογραφή μου
Οδηγίες για αρχάριους στο Ubuntu (12.04 LTS)Οδηγοί του forum
Άβαταρ μέλους
fkol k4
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4829
Εγγραφή: 28 Φεβ 2011, 22:56
Τοποθεσία: Αθήνα
Launchpad: fkol-k4
IRC: fkol_k4
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό lepidas » 20 Δεκ 2013, 11:37

η εντολη για τις πρωτες εκτος των 2 τελευταιων ειναι
Κώδικας: Επιλογή όλων
head -n -2


ο τροπος rm ειναι προς αναζητηση ακομα :D
Άβαταρ μέλους
lepidas
superbTUX
superbTUX
 
Δημοσιεύσεις: 3326
Εγγραφή: 11 Μάιος 2011, 11:10
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό fkol k4 » 20 Δεκ 2013, 11:42

lepidas έγραψε:η εντολη για τις πρωτες εκτος των 2 τελευταιων ειναι
Κώδικας: Επιλογή όλων
head -n -2


ο τροπος rm ειναι προς αναζητηση ακομα :D

Μια χαρά είναι, ευχαριστώ Γιώργο... :clap: :bow:
Το rm είναι
Κώδικας: Επιλογή όλων
rm $(ls file*.ext | head -n -2)
Γνώσεις: Linux: ★★★☆☆ Προγραμματισμός: ★☆☆☆☆ Αγγλικά: ★★★★★
Η υπογραφή μου
Οδηγίες για αρχάριους στο Ubuntu (12.04 LTS)Οδηγοί του forum
Άβαταρ μέλους
fkol k4
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4829
Εγγραφή: 28 Φεβ 2011, 22:56
Τοποθεσία: Αθήνα
Launchpad: fkol-k4
IRC: fkol_k4
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό eliasps » 21 Δεκ 2013, 03:12

Για την ιστορία, υπάρχει και το ! operator για εξαίρεση.
Άβαταρ μέλους
eliasps
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4017
Εγγραφή: 16 Δεκ 2011, 22:25
Τοποθεσία: Αθήνα, Αττική
Launchpad: eliasps
IRC: eliasps
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Ilias95 » 21 Δεκ 2013, 03:57

eliasps έγραψε:Για την ιστορία, υπάρχει και το ! operator για εξαίρεση.

Πως μπορεί να εφαρμοστεί για να εμφανίσει όλα τα αρχεία εκτός απ' το 1ο πχ;
Δηλαδή να «αντιστρέψει» την εντολή:
Κώδικας: Επιλογή όλων
ls file*.ext | head -n 1

Δεν μπορώ να πετύχω την σύνταξη.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό malos » 04 Ιαν 2014, 01:45

Μπορώ παιδιά από κονσόλα να στείλω κάποιο mail;
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1251
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Learner » 04 Ιαν 2014, 18:06

Ilias95 έγραψε:
eliasps έγραψε:Για την ιστορία, υπάρχει και το ! operator για εξαίρεση.

Πως μπορεί να εφαρμοστεί για να εμφανίσει όλα τα αρχεία εκτός απ' το 1ο πχ;
Δηλαδή να «αντιστρέψει» την εντολή:
Κώδικας: Επιλογή όλων
ls file*.ext | head -n 1

Δεν μπορώ να πετύχω την σύνταξη.


Δεν νομίζω ότι το θαυμαστικό στο Bash είναι Negation operator όπως το περιγράφει στο site.
Πχ δώστε
Κώδικας: Επιλογή όλων
!800

αναλόγως το ιστορικό που κρατάτε βέβαια.

Επίσης στο manual το μόνο που είδα περί exclamation point είναι

έγραψε:
If the first character of parameter is an exclamation point (!), a level of variable indirection is introduced. Bash uses the value
of the variable formed from the rest of parameter as the name of the variable; this variable is then expanded and that value is used
in the rest of the substitution, rather than the value of parameter itself. This is known as indirect expansion. The exceptions to
this are the expansions of ${!prefix*} and ${!name[@]} described below. The exclamation point must immediately follow the left brace
in order to introduce indirection.


malos έγραψε:Μπορώ παιδιά από κονσόλα να στείλω κάποιο mail;

Μέσω κάποιου προγράμματος γι' αυτή τη δουλειά ; π.χ Sendmail
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9766
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTux
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό akounadis » 04 Ιαν 2014, 18:17

malos έγραψε:Μπορώ παιδιά από κονσόλα να στείλω κάποιο mail;


...και εδώ http://forum.ubuntu-gr.org/viewtopic.php?f=9&t=6271&http
Intel Core i7-7700HQ CPU @ 2.80GHz ‖ RAM 7617 MiB ‖ Dell Inc. 065C71 - Dell Inc. Inspiron 15 7000 Gaming
Intel Device [8086:591b] {i915} ⋮ nVidia Device [10de:1c8c] {nouveau}
wlp3s0: Intel Wireless 3165 [8086:3165] (rev 79) ⋮ enp2s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
Συναντήσεις φίλων του Ubuntu-gr σε πόλεις της Ελλάδας
Άβαταρ μέλους
akounadis
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1050
Εγγραφή: 23 Δεκ 2009, 17:40
Τοποθεσία: Πειραιάς
Launchpad: akounadis
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό eliasps » 06 Φεβ 2014, 03:44

Γεια σας.

Λοιπόν, έχω μέσα σε ένα φάκελο περίπου 400 αρχεία το εξής μοτίβο στα ονόματά τους:
Κώδικας: Επιλογή όλων
Συγκεκριμένη πρόταση για όλα - 1 - κάποια άλλη πρόταση Α.pdf
Συγκεκριμένη πρόταση για όλα - 2 - κάποια άλλη πρόταση B.pdf
Συγκεκριμένη πρόταση για όλα - 3 - κάποια άλλη πρόταση C.pdf
....
Συγκεκριμένη πρόταση για όλα - 400 - κάποια άλλη πρόταση XYZ.pdf

Όπως καταλαβαίνετε, όλα τα αρχεία ξεκινούν με μία ίδια πρόταση, στη συνέχεια έχουν έναν αριθμό και μετά μία άλλη πρόταση που είναι διαφορετική για το καθένα.
Μέσα στον φάκελο υπάρχουν και άλλα άσχετα αρχεία.

Αυτό που θέλω να κάνω είναι με μία εντολή να αφαιρεθεί από όλα η συγκεκριμένη πρόταση στην αρχή του ονόματος και να μείνει το υπόλοιπο. Δηλαδή να γίνουν έτσι:
Κώδικας: Επιλογή όλων
1 - κάποια άλλη πρόταση Α.pdf
2 - κάποια άλλη πρόταση B.pdf
3 - κάποια άλλη πρόταση C.pdf
....
400 - κάποια άλλη πρόταση XYZ.pdf


Έχω καταλήξει στο εξής:
Μορφοποιημένος Κώδικας: Επιλογή όλων
ls -1 'Συγκεκριμένη πρόταση για όλα - '* | while read file ; do mv $file "`echo $file | sed 's/\Συγκεκριμένη\ πρόταση\ για\ όλα\ -\ //'`" ;done

Aλλά ως αποτέλεσμα παίρνω το:
Κώδικας: Επιλογή όλων
mv: target ‘1 - κάποια άλλη πρόταση Α.pdf’ is not a directory
mv: target ‘2 - κάποια άλλη πρόταση B.pdf’ is not a directory
mv: target ‘3 - κάποια άλλη πρόταση C.pdf’ is not a directory
....
mv: target ‘400 - κάποια άλλη πρόταση XYZ.pdf’ is not a directory

Δηλαδή αντιμετωπίζει τον προορισμό ως φάκελο και όχι ως αρχείο, όπως καταλαβαίνω δηλαδή.
Δοκίμασα και με την παράμετρο [-T] στο mv αλλά δεν άλλαξε κάτι.

Εκτελώντας την εντολή ενώ έχω αντικαταστήσει το mv με το echo για λόγους ελέγχου, δηλαδή έτσι:
Μορφοποιημένος Κώδικας: Επιλογή όλων
ls -1 'Συγκεκριμένη πρόταση για όλα - '* | while read file ; do echo $file "`echo $file | sed 's/\Συγκεκριμένη\ πρόταση\ για\ όλα\ -\ //'`" ;done

Παίρνω το επιθυμητό αποτέλεσμα, δηλαδή το όνομα του αρχείου πριν και όπως το θέλω μετά:
Κώδικας: Επιλογή όλων
Συγκεκριμένη πρόταση για όλα - 1 - κάποια άλλη πρόταση Α.pdf 1 - κάποια άλλη πρόταση Α.pdf
Συγκεκριμένη πρόταση για όλα - 2 - κάποια άλλη πρόταση B.pdf 2 - κάποια άλλη πρόταση B.pdf
Συγκεκριμένη πρόταση για όλα - 3 - κάποια άλλη πρόταση C.pdf 3 - κάποια άλλη πρόταση C.pdf
.... ....
Συγκεκριμένη πρόταση για όλα - 400 - κάποια άλλη πρόταση XYZ.pdf 400 - κάποια άλλη πρόταση XYZ.pdf


Γνωρίζει κανείς που είναι το λάθος και δεν γίνεται μετονομασία των αρχείων με την mv;
Ή έναν διαφορετικό τρόπο για να αφαιρέσω από το όνομα των αρχείων την πρώτη πρόταση που είναι ίδια σε όλα; Εκτός από το να τα κάνω ένα ένα! :P
Kατά προτίμηση να είναι στο bash η λύση, κυρίως για λόγους εκμάθησης. Αλλά οποιοσδήποτε τρόπος είναι ευπρόσδεκτος.

Ευχαριστώ εκ των προτέρων.
Άβαταρ μέλους
eliasps
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4017
Εγγραφή: 16 Δεκ 2011, 22:25
Τοποθεσία: Αθήνα, Αττική
Launchpad: eliasps
IRC: eliasps
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό vagrale13 » 06 Φεβ 2014, 03:56

Δοκιμασε με rename

Κώδικας: Επιλογή όλων
rename "s/Συγκεκριμένη πρόταση για όλα - //g" *.pdf
Desktop 1: Mint 13 Maya i386 / Ubuntu 14.10 Utopic Unicorn i386 (development branch)
CPU: AMD ATHLON II X2 215 │ RAM: 4026Mb │ Graphics Card: GeForce 210 512MB │ LG W2243S : 1920 x 1080
Desktop 2: Ubuntu 12.04 LTS Precise Pangoli i386
AMD Athlon 64 X2 5800+ │ 1024Mb │ nForce 7600 256MB (onboard) | 1024 x 768
Laptop : Sony Vaio VGN-N11m : Ubuntu 14.04Lts Trusty Tahr i386 (Mate desktop)


*Οδηγοί - How to - Tutorials σε Κατηγορίες
*Oδηγίες προς νεοεισερχόμενους σε forum ή linux
Άβαταρ μέλους
vagrale13
Freedom
Freedom
 
Δημοσιεύσεις: 7107
Εγγραφή: 04 Απρ 2009, 19:29
Τοποθεσία: κάπου εδώ μέσα στο net :P
Launchpad: vagrale
IRC: vagrale13
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron