file - डीआईआर को दोबारा कॉपी करने के लिए एसपीपी का उपयोग करते समय फाइलों को कैसे फ़िल्टर करें?




4 Answers

मैं शायद इसके लिए rsync जैसे कुछ का उपयोग करने की सिफारिश करता हूं क्योंकि include और झंडे को छोड़कर, उदाहरण: -

rsync -rav -e ssh --include '*/' --include='*.class' --exclude='*' \
server:/usr/some/unknown/number/of/sub/folders/ \ 
/usr/project/backup/some/unknown/number/of/sub/folders/

कुछ अन्य उपयोगी झंडे:

  • रिकर्सिव के लिए -r
  • संग्रह के लिए (ज्यादातर सभी फाइलें)
  • वर्बोज़ आउटपुट के लिए -v
  • -e डिफ़ॉल्ट के बजाय एसएसएच निर्दिष्ट करने के लिए (जो वास्तव में एसएसएच होना चाहिए)

मुझे सर्वर से स्थानीय में सभी .class फ़ाइलों को सभी डीआईआर आरक्षित करने की आवश्यकता है। उदाहरण के लिए server:/usr/some/unknown/number/of/sub/folders/me.class /usr/project/backup/some/unknown/number/of/sub/folders/me.class समस्या होगी, वहां है कई अन्य बेकार फाइलें हैं जैसे कि एसएसएन-बेस फाइल जिन्हें मैं नहीं चाहता हूं। मैं उन्हें कैसे फ़िल्टर कर सकता हूं ताकि मैं केवल scp .class फाइलें कर सकूं?




फाइलों को फ़िल्टर करने के लिए एसपीपी में कोई सुविधा नहीं है। इस तरह के "उन्नत" सामान के लिए, मैं rsync का उपयोग करने की सलाह देते हैं:

rsync -av --exclude '*.svn' [email protected]:/my/dir .

(इस लाइन को दूरस्थ फ़ोल्डर से वर्तमान में rsync कॉपी करें)

डिफ़ॉल्ट रूप से एक एसएसएच कनेक्शन पर rsync सुरंग के हाल के संस्करण।




एसएसएच कुंजी आधारित प्रमाणीकरण सक्षम के साथ, निम्न स्क्रिप्ट काम करेगा।

for x in `ssh [email protected] 'find /usr/some -type f -name *.class'`; do y=$(echo $x|sed 's/.[^/]*$//'|sed "s/^\/usr//"); mkdir -p /usr/project/backup$y; scp $(echo '[email protected]:'$x) /usr/project/backup$y/; done



यदि आप वास्तव में एसपीपी का उपयोग करना चाहते हैं, तो एक अप्रत्यक्ष तरीका है। क्या हम दूरस्थ सर्वर में स्थानीय फ़ोल्डर '/ src' फ़ोल्डर '/ dst' में सभी .jpg फ़ाइल को प्रतिलिपि बनाना चाहते हैं 10.1.1.2:

#make a clean temp folder
mkdir /tmp/ttt
#copy all .jpg file and retain folder structure as-is
find /src -type f -name *.jpg -exec cp --parents \{\} /tmp/ttt \;
#copy to remote target folder as-is and retain original time attributes
scp -rp /tmp/ttt/* 10.1.1.2:/dst
#if copy ok, remove temp folder
rm -rf /tmp/ttt



Related

file shell filter directory scp