কমান্ড লাইনে ফাইলগুলি অনুলিপি এবং আটকানোর জন্য ক্লিপবোর্ড?


25

বাশে, ধরুন আমি একটি ডিরেক্টরি এবং তারপরে অন্য ডিরেক্টরিটি পরিদর্শন করেছি। আমি প্রথম ডিরেক্টরি থেকে দ্বিতীয় ডিরেক্টরিতে কোনও ফাইল অনুলিপি করতে চাই, তবে সেগুলির দীর্ঘ পথের নাম উল্লেখ না করেই। এটা কি সম্ভব?

আমার অস্থায়ী সমাধানটি /tmpফাইলটির অনুলিপি সঞ্চয় করার জন্য অস্থায়ী জায়গা হিসাবে ব্যবহার করা। cp myfile /tmpযখন আমি প্রথম ডিরেক্টরিতে cp /tmp/myfile .থাকি এবং তখন আমি যখন দ্বিতীয় ডিরেক্টরিতে থাকি। তবে আমি ফাইলটি কিছুতেই ওভাররাইট করে কিনা তা পরীক্ষা করে দেখতে পারি /tmp

কোনও ফাইল অনুলিপি এবং আটকানোর জন্য কি ক্লিপবোর্ডের মতো কিছু রয়েছে?


1
আপনাকে cdকমান্ডটি টাইপ করতে হবে , যাতে আপনি কেবল cd -পূর্ববর্তী ডিরেক্টরিতে ফিরে যেতে পারেন, কমান্ডটি পুনরুদ্ধার করতে আপ-তীর করতে পারেন cdএবং cpপরিবর্তে লাইনটি সম্পাদনা করতে পারেন cd। (সিআরটিএল-এ (লাইনের শুরুর দিকের), ওয়েল-ডি (কিল-ওয়ার্ড) cp -a, সিটিআরএল-ই (লাইন-এর শেষ)।
পিটার কর্ডেস

ইমাস সহ এবং M-x termআপনি ইমাসের ক্লিপবোর্ড ব্যবহার করতে পারেন।
পল জিডি

1
আপনি মিডনাইট কমান্ডার ব্যবহার করতে পারেন এবং হুপসের মধ্য দিয়ে লাফিয়ে যাওয়ার কথা ভুলে যেতে পারেন।
হরিণ হান্টার

@ পলজিডি লোকেরা বলেছেন ইমাস 'একটি অপারেটিং সিস্টেম ... বেশিরভাগের ক্লিপবোর্ড রয়েছে;)
ভলকার সিগেল

@ জেফ শ্যাচলার ধন্যবাদ ................................
টিম

উত্তর:


59

বাশ ব্যবহার করে, আমি কেবল ডিরেক্টরিগুলি দেখতে যাব:

$ cd /path/to/source/directory
$ cd /path/to/destination/directory

তারপরে, আমি শর্টকাটটি ব্যবহার করব ~-, যা পূর্ববর্তী ডিরেক্টরিটিতে নির্দেশ করে:

$ cp -v ~-/file1.txt .
$ cp -v ~-/file2.txt .
$ cp -v ~-/file3.txt .

যদি কেউ বিপরীত ক্রমে ডিরেক্টরিতে যেতে চান, তবে:

$ cp -v fileA.txt ~-
$ cp -v fileB.txt ~-
$ cp -v fileC.txt ~-

25
+1 আমি এখন ২০ বছরেরও বেশি সময় ধরে ইউনিক্স / লিনাক্স শেল ব্যবহার করছি এবং আমি সেই শর্টকাটটি জানতাম না।
দুবু

4
হু, এটি একটি সহজ শর্টকাট "$OLDPWD"। কেন তিনটি পৃথক cpকমান্ড, যদিও? cp -a ~-/file[1-3].txt .
পিটার কর্ডস

4
আসলে, তিনটির cpউদাহরণ। বাস্তব বিশ্বে, ওয়াইল্ডকার্ড অক্ষরগুলি অনুলিপি টাস্কটি সহজ করার জন্যও ব্যবহার করা যেতে পারে।
অ্যান্ডারসন মেডিইরোস গোমেস

2
আমি কিছু pushdপার্সিং এবং পার্সিংয়ের কথা উল্লেখ করতে যাচ্ছিলাম dirs... তবে এটি অনেক দূরে, আরও ভাল। আমি আপনাকে এটি যুক্ত করার পরামর্শ দিচ্ছি "$OLDPWD"যা হুবহু সমতুল্য ~-এবং আরও বহনযোগ্য (এটি যারা ব্যবহার করছে না তাদের জন্য সহায়কbash
ওয়াইল্ডকার্ড

1
~+একইভাবে এর জন্য একটি শর্টকাট"$PWD"
পল ইভান্স

11

যদি আমি সেই পরিস্থিতিটিকে একতরফা হিসাবে আসতে দেখি তবে আমি সম্ভবত:

a=`pwd`
cd /somewhere/else
cp "$a/myfile" .

যদি এমন ডিরেক্টরি থাকে যে আমি আধা নিয়মিতভাবে ফাইলগুলি অনুলিপি করতে দেখলাম তবে আমি সম্ভবত আমার। প্রোফাইলে তাদের জন্য কিছু স্মৃতিচক্রের পরিবর্তনশীল সংজ্ঞায়িত করব।

যুক্ত করতে সম্পাদিত:

এটির পরে ঘুমানোর পরে, আমি ভাবছিলাম যে আপনি অন্যান্য জিইআই / ওএস ব্যবহারের কাছাকাছি যেতে পারি যেখানে আপনি কয়েকটি সংখ্যক ফাইল নির্বাচন করেন, সেগুলি "কাটা" বা "অনুলিপি করুন", তারপরে অন্য কোথাও "পেস্ট" করুন। আমি যে সেরা নির্বাচন পদ্ধতিটি নিয়ে আসতে পারি তা হ'ল আপনার মস্তিষ্ক / পছন্দগুলি এবং শেলের গ্লোববিং বৈশিষ্ট্য। আমি নামকরণের সাথে খুব সৃজনশীল নই, তবে এটি প্রাথমিক ধারণা (বাশ সিনট্যাক্সে):

function copyfiles {
  _copypastefiles=("$@")
  _copypastesrc="$PWD"
  _copypastemode=copy
}

function cutfiles {
  _copypastefiles=("$@")
  _copypastesrc="$PWD"
  _copypastemode=cut
}

function pastefiles {
  for f in "${_copypastefiles[@]}"
  do
    cp "${_copypastesrc}/$f" .
    if [[ ${_copypastemode} = "cut" ]]
    then
      rm "${_copypastesrc}/$f"
    fi
  done
}

এটি ব্যবহার করতে কোডটি ~ / .bash_profile এ রাখুন, তারপরে cdউত্স ডিরেক্টরিতে এবং চালনা করুন copyfiles glob*hereবা হয় cutfiles glob*here। যা ঘটে তা হ'ল আপনার শেল গ্লোবগুলি প্রসারিত করে এবং সেই ফাইলনামগুলিকে একটি অ্যারেতে রাখে। তারপরে cdআপনি গন্তব্য ডিরেক্টরিতে যান এবং চালান pastefiles, যা cpপ্রতিটি উত্স ফাইলের জন্য একটি কমান্ড কার্যকর করে । আপনি যদি আগে ফাইলগুলি "কেটে" রেখেছিলেন, তবে পেস্টফায়ালগুলি উত্স ফাইলটিও সরিয়ে দেয় (বা চেষ্টা করে)। এটি কোনও ত্রুটি-পরীক্ষণ করে না (বিদ্যমান ফাইলগুলির সাথে সম্ভাব্যতার সাথে ক্লোবারিংয়ের আগে cp; বা আপনার "কাটা" চলাকালীন ফাইলগুলি সরিয়ে নেওয়ার অনুমতি রয়েছে, অথবা আপনি সরানোর পরে উত্স ডিরেক্টরিটি পুনরায় অ্যাক্সেস করতে পারবেন) এর)।


4
আপনার এক-অফের জন্য, $OLDPWDইতিমধ্যে বিদ্যমান, যা ~-ব্যাশ এবং zsh এ সংক্ষিপ্ত করা যেতে পারে ।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

5

আমি মনে করি এটি ~-সঠিক উত্তর, তবে নোট করুন যে ব্যাশের একটি অন্তর্নির্মিত লাইন সম্পাদক রয়েছে যা পাঠ্যটি অনুলিপি / আটকানো যায়।

আপনি Emacs মোডে হন তাহলে আপনি আপনার পুনরাহ্বান পারেন cdইতিহাস থেকে কমান্ড, এবং ব্যবহার Control-uকরার জন্য হত্যা ব্যাশ "ক্লিপবোর্ড" হত্যা আংটি নামক লাইন (সেখানে অন্য কোন উপায়ে খুব)। তারপরে আপনি যে কোনও সময় এই স্ট্রিংটিকে একটি নতুন কমান্ডে ইঙ্ক করতে পারেন Control-y। স্পষ্টতই, আপনার উদাহরণে এটি নির্ভর করে আপনি আপনার cdকমান্ডে একটি পরম ডিরেক্টরি নাম ব্যবহার করেছেন ।

আপনি আকর্ষণীয় ডিফল্ট কী-বন্ডিং ব্যবহার করতে পারেন Meta-.। এটি পূর্ববর্তী কমান্ড থেকে শেষ শব্দটি আপনার বর্তমান লাইনে অনুলিপি করে । যদি পুনরাবৃত্তি হয়, প্রতিবার এটি ইতিহাসে একটি কমান্ড ফিরে আসে। তাই আপনি যদি একটি cd /x, তারপর cd /yদ্বারা অনুসরণ cdMeta-.Meta-.আপনি হবে /xআপনার ইনপুট হবে।


5

অ্যান্ডারসন এম। গোমেসের উত্তরের প্রসারিত করার জন্য , বাশ আপনাকে ডিরেক্টরি ডিরেক্টরিতে স্টোরের যে কোনও পূর্ব ডিরেক্টরিতে টাইপ করে ~N(বা ~+N) Nদির স্ট্যাকের অবস্থান কোথায় তা উল্লেখ করতে দেয়। উদাহরণ স্বরূপ:

# go some places
$ cd /path/to/source/directory
$ pushd /path/to/destination/directory
$ pushd $HOME
$ pushd /tmp

# show the current dir stack
$ dirs -v
0 /tmp
1 ~
2 /path/to/destination/directory
3 /path/to/source/directory

এখন আপনি দুটি অতীতের ডিরেক্টরিগুলির মধ্যে একটি ফাইল অনুলিপি করতে পারবেন, যার মধ্যে একটিও বর্তমানের নয়:

cp -v ~3/file1.txt ~2

মূল পোস্টারের সমস্যা সমাধানের জন্য, আপনি এটি করবেন:

$ cd /path/to/source/directory
$ pushd /path/to/destination/directory

# show the current dir stack
$ dirs -v
0 /path/to/destination/directory
1 /path/to/source/directory

# copy
cp -v ~1/file[123].txt .

ফাইলগুলির একটি বড় সেট দিয়ে আপনি তাদের নামগুলি একটি ম্যানিফেস্ট ফাইলটিতে তালিকাভুক্ত করতে পারেন এবং তারপরে উত্স দির থেকে অনুলিপিটি করতে পারেন:

$ cd /path/to/destination/directory
$ pushd /path/to/source/directory

# copy
cp -v $(cat files_to_copy.list) ~1

আরও দেখুন: বাশ ম্যান পৃষ্ঠার এই বিভাগটি


একইভাবে, টিসিএসে, আপনি আপনার দির স্ট্যাকের দ্বিতীয় দির উল্লেখ করার জন্য =2স্বরলিপিটি ব্যবহার করতে পারেন (পরিবর্তে ~2)।

আরও দেখুন: টিসিএস ম্যান পৃষ্ঠার এই বিভাগটি


4

আপনি যখন প্রথম ডিরেক্টরিতে থাকেন, উত্সটি বলতে বা srcসংক্ষেপে চালিত করি

src=${PWD}

তারপরে cdদ্বিতীয় ডিরেক্টরিতে এবং কার্যকর করুন:

cp -i ${src}/filename .

-iবিকল্প যদি আপনি ওপর দিয়েই লিখতে চান জিজ্ঞাসা করবে, যদি সেখানে একটি ডুপ্লিকেট ফাইল


ধন্যবাদ। ফাইলের নাম উল্লেখ না করেই এটি আরও ভাল।
টিম

4

অ্যান্ডারসন-এম-গোমসের প্রতিক্রিয়াতে একটি প্রকরণ। বাশ ব্যবহার করে, আমি কেবল ডিরেক্টরিগুলি দেখতে যাব:

$ cd /path/to/source/directory
$ cd /path/to/destination/directory

তারপরে, আমি ভেরিয়েবলটি $ OLDPWD ব্যবহার করব, যা পূর্ববর্তী ডিরেক্টরিটিতে নির্দেশ করে:

$ cp -v $OLDPWD/file1.txt .

যদি কেউ বিপরীত ক্রমে ডিরেক্টরিতে যেতে চান, তবে:

$ cp -v fileA.txt $OLDPWD/

3
+1, তবে আপনি আপনার পরিবর্তনশীল প্রসারণ "উদ্ধৃতি" করতে ভুলে গেছেন। যদি $OLDPWDস্পেস থাকে তবে এটি বিরতি দেয়। এছাড়াও, আমি সবসময় ব্যবহার করি cp -a। এছাড়াও, এটি দুর্ভাগ্যজনক যে ট্যাব-সমাপ্তি ভেরিয়েবলের বিস্তৃতিতে ভেঙে যায়। আপনি বর্তমান কমান্ড লাইনটি শেল-প্রসারিত করতে ctrl-alt-e ব্যবহার করতে পারেন, যদিও, DP OLDPWD অংশটি টাইপ করার পরে।
পিটার কর্ডস

1
~-জন্য একটি শর্টকাট$OLDPWD
গিলেজ 'SO- স্টপ হচ্ছে মন্দ'

আমি কেবল আরও একটি ভিন্নতা দেখিয়েছিলাম, যেহেতু ইউনিক্স / লিনাক্স সেগুলি পূর্ণ। মজার বিষয়, আমি লিনাক্সটি> 20 বছর ধরে ব্যবহার করে আসছি, এবং আমি এর আগে কখনও দেখিনি। এছাড়াও, $ OLDPWD মনে রাখা সহজ।
স্কট কার্লসন

3

ব্যাশ থাকলে, আমি ব্যবহার করেন pushd এবং popd । এই কমান্ডগুলি পরে ব্যবহারের জন্য একটি কার্যকর ফিফো স্ট্যাক ডিরেক্টরিতে রাখে। আপনি ডায়ার ব্যবহার করে যে কোনও সময় স্ট্যাকের সাথে পরামর্শ করতে পারেন ।

যেমন আমি করব:

pushd .
cd /somewhere/else
cp "`popd`/myfile"

2

আপনি ব্যবহার করতে পারেন xclip:

NAME
       xclip - command line interface to X selections (clipboard)

SYNOPSIS
       xclip [OPTION] [FILE]...

DESCRIPTION
       Reads  from standard in, or from one or more files, and makes the data available as an X selection for pasting
       into X applications. Prints current X selection to standard out.

উদাহরণ:

$ cd /path/to/dir1
$ xclip-copyfile file1 file2
$ cd /path/to/dir2
$ xclip-pastefile
file1 file2

এছাড়াও পরিদর্শন xsel


একটি নয় যে tar | gzipমধ্যে / আউট এক্স ক্লিপবোর্ডের। কিন্ডা তুলনা করে cp, এবং সিমলিঙ্ক বা হার্ডলিঙ্কগুলি তৈরিতে সাধারণীকরণ করে না। ( cp -asবা cp -al)
পিটার কর্ডস

1

আপনি clipboard-filesএখানে স্ক্রিপ্টটি পরীক্ষা করে দেখতে পারেন : https://github.com/larspontoppidan/clipboard-files

মনে হচ্ছে কমান্ড প্রদান করে ccopy, ccutএবং cpasteযে ডেস্কটপ পরিবেশে ক্লিপবোর্ড ব্যবহার এবং স্বজ্ঞাত কপি ফাইল পেস্ট অনুমতি /:

ccopy myfile
cd <second directory>
cpaste

ডেস্কটপ এনভায়রনমেন্ট ক্লিপবোর্ড ব্যবহার করার সাথে সাথে অনুলিপি / আটকানো ফাইল ম্যানেজার এবং আইডিইর মতো অন্যান্য প্রোগ্রামে ক্লিপবোর্ডে রাখা ফাইলগুলির সাথে যোগাযোগ করবে। কমপক্ষে এটি জিনোমের মতো ডেস্কটপগুলিতে কাজ করে।

সম্পূর্ণ প্রকাশ, আমি স্ক্রিপ্টটি এখানে কিছু খুঁজে বের করার পরে লিখেছিলাম ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.