मैंने ls का उपयोग करते हुए कुछ एक लाइनर देखे हैं, लेकिन मैं इससे बचना चाहूंगा।
मैं एक स्क्रिप्ट लिख रहा हूं जो टाइमस्टैम्प्ड फ़ोल्डर में मेरे सर्वर पर कोड कॉपी करता है। 'वर्तमान' संस्करण हमेशा एक निरंतर पथ के सममित होता है। इस तरह, अगर कुछ भी गलत हुआ तो मैं वापस रोल कर सकता हूं। अब, हर तैनाती एक नया फ़ोल्डर बनाती है, लेकिन मैं केवल 3 नवीनतम रखना चाहूंगा।
यहाँ मेरा वर्तमान संस्करण है:
ls -tp | grep '/$' | grep -v 'current\|shared' | tail -n +4 | xargs -d '\n' rm -rf --
यह युक्त फ़ोल्डर में निष्पादित किया जाता है, फ़ाइलों को शामिल करता है, और दो फ़ोल्डर्स 'वर्तमान' और 'साझा' जिसे मैं रखना चाहता हूं (वर्तमान में वास्तव में उपरोक्त सिम्लिंक हो रहा है), और सभी को हटा देता है, लेकिन 3 सबसे नए द्वारा छांटे गए ls -t
।
क्या कोई ऐसा तरीका है जिसके बिना मैं कर सकता हूं ls
, और केवल बैश और ग्नू टूलचैन का उपयोग कर रहा हूं ?
छंटाई के लिए बने सभी फ़ोल्डरों को इस प्रारूप का नाम दिया गया है:
$timestamp.$branch.$sha1
जहां SHA1 और शाखा के बारे में जानकारी है कि वास्तव में क्या तैनात किया गया था।
सर्वर Ubuntu Xenial चलाता है।
संपादित करें: फ़ोल्डर जैसा दिखता है, उसके कुछ उदाहरण प्रदान करें
यहाँ तैनाती फ़ोल्डर से एक सूची है, यह अभी कैसे दिखता है:
drwxr-x--- 13 app www-data 4096 Mar 29 00:10 1490738956.develop.b806/
drwxr-x--- 13 app www-data 4096 Mar 29 00:19 1490739485.develop.ae01/
drwxr-x--- 14 app www-data 4096 Mar 29 03:33 1490751118.develop.f5b0/
lrwxrwxrwx 1 app www-data 40 Mar 29 03:33 current -> /home/app/deploy/1490751118.develop.f5b0/
drwx------ 5 app root 4096 Mar 10 04:12 shared/