Περισσότερα
Βάζετε φερμουάρ σε όλα τα αρχεία του καταλόγου;
Υπάρχει τρόπος να συμπιέσετε όλα τα αρχεία ενός συγκεκριμένου καταλόγου με την εντολή zip
; Έχω ακούσει για τη χρήση του *.*
, αλλά θέλω να λειτουργεί και για αρχεία χωρίς επέκταση.
487
3
Μπορείτε απλά να χρησιμοποιήσετε το
*
- δεν χρειάζεται το*.*
. Οι επεκτάσεις αρχείων δεν είναι ειδικές στο Unix. Το*
ταιριάζει με μηδέν ή περισσότερους χαρακτήρες-συμπεριλαμβανομένης της τελείας. Έτσι, ταιριάζει με τοfoo.png
, επειδή αυτό είναι μηδέν ή περισσότεροι χαρακτήρες (επτά, για την ακρίβεια).Σημειώστε ότι το
*
από προεπιλογή δεν ταιριάζει με αρχεία που αρχίζουν με τελεία (ούτε το*.*
). Αυτό είναι συχνά αυτό που θέλετε. Αν όχι, στο bash, αν κάνετεshopt -s dotglob
θα το κάνει (αλλά θα εξακολουθεί να αποκλείει τα.
και..
). Άλλα κελύφη έχουν διαφορετικούς τρόπους (ή καθόλου) για να συμπεριλάβουν τα dotfiles.Εναλλακτικά, το
zip
έχει επίσης την επιλογή-r
(αναδρομική) για να κάνετε ολόκληρα δέντρα καταλόγων με τη μία (και να μην χρειάζεται να ανησυχείτε για το πρόβλημα των dotfile):όπου
mydir
είναι ο κατάλογος που περιέχει τα αρχεία σας. Σημειώστε ότι το παραγόμενο zip θα περιέχει τη δομή καταλόγου καθώς και τα αρχεία. Όπως επισημαίνει ο peterph στο σχόλιό του, αυτό συνήθως θεωρείται καλό: η εξαγωγή του zip θα αποθηκεύσει όλα τα αρχεία που εξήχθησαν σε έναν υποκατάλογο.Μπορείτε επίσης να πείτε στο zip να μην αποθηκεύει τα μονοπάτια με την επιλογή
-j
/--junk-paths
.Η εντολή
zip
έρχεται με τεκμηρίωση που σας λέει για όλες τις (πολλές) επιλογές της- πληκτρολογήστεman zip
για να δείτε αυτή την τεκμηρίωση. Αυτό δεν ισχύει μόνο για τη zip- μπορείτε να βρείτε τεκμηρίωση για τις περισσότερες εντολές με αυτόν τον τρόπο.Στην περίπτωσή μου ήθελα να βάλω το zip κάθε αρχείου στο δικό του αρχείο, οπότε έκανα τα εξής (στο
zsh
):Ένας άλλος τρόπος θα ήταν να χρησιμοποιήσετε το find και το xargs: (αυτό μπορεί να περιλαμβάνει έναν κατάλογο "." στο zip, αλλά θα πρέπει να εξαχθεί σωστά. Με τη δοκιμή μου, το zip αφαίρεσε την τελεία πριν από τη συμπίεση)
find . -type f -exec zip zipfile.zip {} +
(Το
+
μπορεί να αντικατασταθεί με\;
αν η έκδοση τουfind
σας δεν υποστηρίζει το τέλος+
για exec. Θα είναι όμως πιο αργή...)Αυτό από προεπιλογή θα συμπεριλάβει όλους τους υποκαταλόγους. Στο GNU find το
-maxdepth
μπορεί να το αποτρέψει αυτό.