क्या किसी के पास उन pesky ._ और .DS_Store फ़ाइलों को हटाने के लिए एक समाधान है जो किसी को मैक से ए लिनक्स सर्वर पर फाइल ले जाने के बाद मिलता है?
एक आरंभ निर्देशिका निर्दिष्ट करें और इसे जाने दें? जैसे / var / www / html / नीचे ...
क्या किसी के पास उन pesky ._ और .DS_Store फ़ाइलों को हटाने के लिए एक समाधान है जो किसी को मैक से ए लिनक्स सर्वर पर फाइल ले जाने के बाद मिलता है?
एक आरंभ निर्देशिका निर्दिष्ट करें और इसे जाने दें? जैसे / var / www / html / नीचे ...
जवाबों:
निर्देशिका में परिवर्तन, और उपयोग करें:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
परीक्षण नहीं, उन्हें पहले xargs के बिना कोशिश करो!
आप पहले निर्देशिका को बदलने के बजाय, निर्देशिका के साथ खोज के बाद की अवधि को बदल सकते हैं।
find /dir/here ...
-delete
कार्रवाई का समर्थन करते हैं , जो इसे छोटा कर सकता है। @JT: यह खोज पुनरावर्ती रूप से होती है .
। निर्भर करता है कि कितनी फाइलें और उपनिर्देशिकाएं हैं ... क्या आप सिर्फ उन लोगों को अपलोड करने से मना नहीं कर सकते?
-r
इस मामले में (पुनरावर्ती) ध्वज का उपयोग करने की अनुशंसा नहीं की जाती है क्योंकि आप किसी भी निर्देशिका को हटाना नहीं चाहते हैं ..
command rm
एक बेहतर (यह है कि, और अधिक प्रत्यक्ष) समाधान हो सकता है? ("प्रत्यक्ष" से मेरा मतलब है कि यह विशेष रूप से हाथ में समस्या से निपटने के लिए और कुछ नहीं है, और इसलिए किसी भी अवांछित दुष्प्रभाव की संभावना कम है, और कोड को बनाए रखने वाले किसी भी व्यक्ति के लिए अधिक आत्म-व्याख्यात्मक होने जा रहा है) बाद में।)
नए खोजकर्ता समर्थन करते हैं -delete
, इसलिए:
find . -name ".DS_Store" -delete
-print
विलोपन की सूची प्राप्त करने के लिए भी जोड़ें ।
यदि आपके पास अप-टू-डेट POSIX प्रणाली है, तो कमांड आपके लिए काम करेगा, मुझे विश्वास है। कम से कम यह मेरे लिए OS X 10.8 पर काम करता है और दूसरों के लिए काम करता है जिन्होंने इसे macOS 10.12 (Mojave) पर टेस्ट किया है।
@ X-Istence की पोस्ट पर एक टिप्पणी में @ephemient का श्रेय (यह अपने स्वयं के उत्तर को वारंट करने के लिए पर्याप्त सहायक था)।
find
डिफ़ॉल्ट रूप से वर्तमान कार्य निर्देशिका में पुनरावृत्ति होती है।
.
macOS 10.12 (सिएरा) पर जरूरत है ।
सरल आदेश:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
सौभाग्य!
rm -i
बोलें , मैंने सिर्फ इस खोज का उपयोग किया है । / -नाम '* py'`r , which did NOT prompt me to delete files. you will need to take it on the end (i.e.
-rfi`)। मेरी बैकअप स्क्रिप्ट के लिए भगवान का शुक्र है।
-bash: /bin/rm: Argument list too long
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
आप बैश के बजाय zsh पर जा सकते हैं। यह आपको निर्देशिका ट्री में कहीं भी फ़ाइलों से मिलान करने के लिए ** का उपयोग करने देता है:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
आप उन्हें इस तरह से जोड़ सकते हैं:
$ rm /var/www/html/**/(_*|.DS_Store)
Zsh में बहुत सारी अन्य विशेषताएं हैं जिनमें बैश की कमी है, लेकिन यह अकेला ही स्विच के लिए लायक है। यह सबसे (शायद सभी) लिनक्स डिस्ट्रो के साथ-साथ साइबरविन और ओएस एक्स में उपलब्ध है।
आप zsh साइट पर अधिक जानकारी पा सकते हैं ।
**
भी सपोर्ट करता है :-) (हालांकि डिफ़ॉल्ट रूप से नहीं, shopt -s globstar
सेट करने की आवश्यकता है)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
find
इसका समर्थन करता है, तो +
यह xargs-like है: find . -name "FILE-TO-FIND" -exec rm -rf {} +
- (इसके अलावा, आप पहले एक स्थान याद कर रहे हैं -exec
)
"Thumbs.db" को पुनरावर्ती रूप से हटाने के लिए उदाहरण;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
द्वारा मान्य करें:
find . -iname "Thumbs.db"
यह अब, वर्तमान पथ के अंदर "Thumbs.db" के साथ किसी भी प्रविष्टि को प्रदर्शित नहीं करना चाहिए।
xargs
और print0
इसके बजाय exec
(कारण हैं)।
यह देखना बेहतर है कि इस उत्तर को -प्रिंट जोड़कर क्या निकाल रहा है
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
अगर आपके पास बैश 4.0 ++ है
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
ध्यान देने योग्य कुछ बातें:
'-डेलीट' पुनरावर्ती नहीं है। तो अगर। टेम्पररी इटम्स (फोल्डर) में फाइलें हैं, तो कमांड विफल हो जाती है।
मैक द्वारा बनाई गई इन pesky फ़ाइलों में से बहुत से हैं: .DS_Store ._। DS_Store .TemporaryItems .apdisk
यह एक आदेश उन सभी को संबोधित करता है। कई मैचों के लिए बार-बार दौड़ने से बचाता है।
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
यह भी काम करता है:
sudo rm -rf 2018-03-*
यहां प्रारूप 2018-03 के नामों के साथ आपकी डिलीट की गई फाइलें- (कुछ और)
इसे सरल रखें
sudo
और न ही आपको कोई जानकारी प्रदान rm
करता है कि आपके उत्तर के संदर्भ में कैसे काम करता है।