कमांड लाइन से एक फ़ाइल / निर्देशिका को कॉपी और पेस्ट करें


17

निम्न आदेश का उपयोग करने के बजाय:

cp {स्रोत फ़ाइल} {डेस्ट फ़ाइल}

मैं एक फाइल को क्लिपबोर्ड में कॉपी करने में सक्षम होना चाहता हूं, और किसी अन्य निर्देशिका में इसे कहीं और पेस्ट करना चाहता हूं। कुछ इस तरह:

/ usr / स्थानीय / dir1 # cp {स्रोत फ़ाइल}
/ usr / स्थानीय / dir1 # cd / usr / स्थानीय / dir2
/ usr / स्थानीय / dir2 # पेस्ट

क्या यह संभव है?

जवाबों:


17

मुझे लगता है कि आपको कुछ करना चाहिए जैसे जीयूआई एप्लिकेशन करते हैं। ऐसा करने के लिए मेरा विचार कॉपी और पेस्ट के लिए दो फ़ंक्शन लिखना है, जहां कॉपी एक अस्थायी फ़ाइल में कॉपी की जाने वाली फ़ाइलों का पथ लिखती है और पेस्ट उन पथों को पढ़ता है और बस cpकमांड को कॉल करता है । मेरा कार्यान्वयन ( .bashrcफ़ाइल में डाला जाना ) नीचे की तरह है:

function Copy {
    touch ~/.clipfiles
    for i in "$@"; do
      if [[ $i != /* ]]; then i=$PWD/$i; fi
      i=${i//\\/\\\\}; i=${i//$'\n'/$'\\\n'}
      printf '%s\n' "$i"
    done >> ~/.clipfiles
}

function Paste {
    while IFS= read src; do
      cp -Rdp "$src" .
    done < ~/.clipfiles
    rm ~/.clipfiles
}

इस विचार को लागू करने के लिए बेहतर स्क्रिप्ट लिखी जा सकती हैं, मैंने अपना परीक्षण किया और यह फाइलों और फ़ोल्डरों के लिए बहुत अच्छी तरह से काम करता है (मुझे नहीं पता कि xclipफ़ोल्डर्स की नकल करने के लिए कैसे काम किया जा सकता है !!)


उदाहरण के लिए:

/usr/local/dir1# Copy a.txt *.cpp
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy *.h *.cpp b.txt subdir1
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy a.txt b.txt 
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Copy c.txt d.txt
/usr/local/dir2# cd /usr/local/dir3
/usr/local/dir3# Paste

1
यह एक आकर्षण की तरह काम करता है!
मयसम

2
मुझे यह विचार पसंद है। और छोटे संशोधनों के साथ, आप "कट" फ़ंक्शन भी लागू कर सकते हैं।
पाब्लो वेंतुरिनो 16

@ क्या आप बता सकते हैं कि आपने क्यों प्रतिस्थापित echoकिया printf?
मेसम

@ मेमसाम के तहत भी काम करना है shopt -s xpg_echo
गाइल्स 'एसओ- बुराई को रोकना'

1
@ मीसम printfपोर्टेबल है और सुरक्षित है जबकि echoऐसा नहीं है। Wooledge wiki में इसका संक्षेप में उल्लेख है
jw013

10

मैं सुझाव देता हूं। मैं इसके लिए हर समय उपयोग करता हूं। लेकिन आपको स्क्रिप्ट की जरूरत नहीं है। बस कार्यों का उपयोग करें।

मुझे इन लिपियों का उपयोग करने की कोई आवश्यकता नहीं है, विशेष रूप से, क्योंकि यदि आप ऐसा कर रहे हैं जो मुझे लगता है कि आप कर रहे हैं, तो आप पहले से उल्लेखित लिपियों (सहायक लिनक्स ब्लॉग पर) कष्टप्रद पाएंगे क्योंकि वे आपको जहां कहीं भी संभव हो , इनपुट के लिए संकेत देते हैं उन्हें उपयोग करने के लिए, यूनिक्स दर्शन के विपरीत।

मेरा सुझाव है कि कुछ कार्यों को अपने में लिखें .bashrc:

clip2file () {
  xclip -out -selection clipboard >> $@
  echo -e "\n" >> $@
}

file2clip () {
  cat $@ | xclip -selection clipboard
}

इनका उपयोग करने के लिए, आपको apt-get install xclip(डेबियन, उबंटू, लिनक्स टकसाल, आदि) या zypper in xclip(ओपनएसयूएसई, अन्य .rpm- आधारित सिस्टम) या कुछ समकक्ष की आवश्यकता है। प्रोग्राम जो भी सिस्टम आप उपयोग कर रहे हैं, उस पर उपलब्ध होना चाहिए।


3

इसके लिए आप xclipकमांड का उपयोग कर सकते हैं । आप इस लिंक से बैश स्क्रिप्ट डाउनलोड कर सकते हैं bash cp2clipऔर bash clippasteअपनी .bashrcफ़ाइल के लिए उपनाम डाल सकते हैं।


@ क्या आप उपनाम से मतलब है?
ixtmixilix

मेरा मतलब है कि अपने घर की डायरेक्टरी में फाइलें रखें और दो उपनामों को अपने .bashrc alias cp2clip = 'bash /home/<username>/cp2clip.sh' और clippaste = 'bash/home/<username>/clippaste.sh' में डालें। आप इन्हें कहीं भी उपयोग कर सकते हैं। उपनामों के बारे में अधिक जानने के लिए आप देख सकते हैं man aliasया linfo.org/alias.html
harish.venkat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.