লুকানো ফাইল এবং লুকানো ডিরেক্টরি এবং তাদের বিষয়বস্তু অন্তর্ভুক্ত করতে সিপি দিয়ে কীভাবে অনুলিপি করবেন?


392

আমি কীভাবে একটি ডিরেক্টরিতে সমস্ত ফাইল এবং ডিরেক্টরিগুলি cp -rঅনুলিপি করতে পারি

প্রয়োজনীয়তা:

  • লুকানো ফাইল এবং লুকানো ডিরেক্টরি অন্তর্ভুক্ত করুন।
  • উপরেরটি অন্তর্ভুক্ত করতে একটি পতাকা সহ একটি একক কমান্ড হোন।
  • একেবারে প্যাটার্ন মিলের উপর নির্ভর করার দরকার নেই।

আমার কুরুচিপূর্ণ, কিন্তু কাজ করছে, হ্যাকটি হ'ল:

cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user

প্যাটার্ন মিল না করে আমি কীভাবে এক কমান্ডে এই সমস্ত করতে পারি? আমার কোন পতাকা ব্যবহার করতে হবে?


1
এখানে আরও উত্তর, যদিও তারা দেখতে তেমন ভাল দেখাচ্ছে না; serverfault.com/questions/3154/…
Roel Van de Paar

দয়া করে, ইলেভেন81, @ ব্রুনো পেরেরির দেওয়া উত্তরটি গ্রহণযোগ্য উত্তরটি পরিবর্তন করার বিষয়ে বিবেচনা করুন, কারণ এটি একটি নতুন ফোল্ডার তৈরি করা এড়িয়ে চলে। যদি তা না হয় তবে এই মন্তব্যটি নতুন পাঠকদের জন্য অন্য (সর্বাধিক ভোট দেওয়া) উত্তরও যাচাইয়ের জন্য সতর্কতা হিসাবে দেখা যাক। TX।
ডাঃ বেকো

উত্তর:


265

ফাইলগুলি নির্দিষ্ট করবেন না:

cp -r /etc/skel /home/user

(দ্রষ্টব্য যে /home/userইতিমধ্যে উপস্থিত থাকতে হবে না, অন্যথায় এটি তৈরি করবে /home/user/skel))


60
যদি বিদ্যমান থাকে তবে /home/user/skel কি অনুরূপ কিছু ব্যবহার করা সম্ভব ?
bradley.ayers

@ ব্র্যাডলি.য়ায়ার্স আমি মনে করি যে কোনও একটি অস্থায়ী উপ-ডিরেক্টরিতে অনুলিপি করতে পারে তারপরে সেগুলি উপরের স্তরে নিয়ে যায় (যেহেতু একই ড্রাইভে চলাচল দ্রুত হয়)। আদর্শের চেয়ে কম তবে আমার কাছে অন্যান্য সমাধানের চেয়ে খাটো।
হালিল Özgür

7
@ ব্র্যাডলি.ইয়ার্স ব্রুনোর উত্তর নীচে আপনার প্রশ্নের সমাধান করেছে
চিহ্নিত করুন

1
এই সমাধানটি আমার পক্ষে কার্যকর হয়নি। এটি লুকানো ফাইলগুলি অনুলিপি করেনি। আমি CentOS প্রকাশ 6.5 ব্যবহার করছি using @ ব্রুনোর সমাধানটি কৌশলটি করেছে।
টেকনেক্সট

2
উবুন্টু / ডিবিয়ান এর অধীনে এটি ডিরেক্টরি ডিরেক্টরিতে 'স্কেল' ডিরেক্টরি রাখে এবং স্কেলের ভিতরে পুনরাবৃত্তি হওয়া ফাইলগুলি নয়। ব্যবহার করুন -T(কোন লক্ষ্য) নিচে প্রতি সঠিক ব্যবহারের জন্য। ( -rTপুনরাবৃত্তির জন্য)
বিসিয়া

468

বলুন যে আপনি নতুন ফোল্ডারটি তৈরি করেছেন (বা একটি তৈরি করতে যাচ্ছেন) এবং ফোল্ডারটি তৈরি হওয়ার পরে ফাইলগুলিতে এটি অনুলিপি করতে চান

mkdir /home/<new_user>
cp -r /etc/skel/. /home/<new_user>

এটি সমস্ত ফাইল / ফোল্ডারটিকে /etc/skelপ্রথম লাইনে তৈরি হওয়া ইতিমধ্যে বিদ্যমান ফোল্ডারে পুনরাবৃত্তভাবে অনুলিপি করবে ।


5
যদি আমি এটি ভুল না করে, এটি লুকানো / ডট ফাইলগুলি অনুলিপি করে না।
হালিল Özgür

34
আমার জন্য ভাল কাজ করে। লক্ষ্য করুন যে '।' এটি কাজ করে সমালোচনা।
চিহ্নিত করুন

12
এটি কাজ করে, কিন্তু, কেন? ম্যানুয়ালটিতে এটির কোনও উল্লেখ খুঁজে পাওয়া যায় না।
জুলিয়েন পালার্ড 14'14

5
আমি মনে করি এটি কাজ করে কারণ সাধারণত, এটি প্রথম যুক্তিতে সর্বশেষ ফোল্ডারের নাম সহ একটি নতুন ফোল্ডার তৈরি করবে। যাইহোক, যেহেতু নামটি হ'ল ., এই আচরণটির জন্য ইতিমধ্যে বিদ্যমান ডিরেক্টরি তৈরি করা প্রয়োজন, সুতরাং এটি কেবল এই পদক্ষেপটি এড়িয়ে চলে।
জেনেক্সার

28
@ টেকনেক্সট বাশ-এ ডিফল্ট গ্লোববিং এ ফাইলগুলি অন্তর্ভুক্ত করতে সক্ষম হবার আগে আপনাকে কমান্ডটি .ব্যবহার করা দরকার তা পরিবর্তন করতে ক এর সাথে শুরু হওয়া ফাইলের নাম অন্তর্ভুক্ত করা হয় না shopt -s dotglob। সুতরাং *, ডিফল্টরূপে, আপনি এই ডিরেক্টরি থেকে পুনরায় ক্রমযুক্ত সমস্ত ফাইল অনুলিপি করতে বলছেন *যা ব্যবহার করে প্রসারিত করা যেতে পারে (যা ডিফল্টরূপে লুকানো ফাইলগুলি অন্তর্ভুক্ত করে না)। অন্য প্রান্তে থাকা অবস্থায় .আপনি "এই ডিরেক্টরি" থেকে অনুলিপিভাবে সমস্ত কিছু অনুলিপি করতে সিপি ব্যবহার করছেন।
ব্রুনো পেরেইরা

79

এটি করার সঠিক উপায় হ'ল -T (--no-target-directory)বিকল্পটি ব্যবহার করা এবং পুনরাবৃত্তভাবে ফোল্ডারগুলি অনুলিপি করুন (স্ল্যাশ, অ্যাসিরিস্টিকস ইত্যাদি ছাড়াই), যেমন:

cp -rT /etc/skel /home/user

এই বিষয়বস্তু কপি হবে /etc/skelথেকে /home/user(লুকানো ফাইল সহ) ফোল্ডার তৈরি /home/userযদি এটা অস্তিত্ব নেই; তবে -Tবিকল্পটি ফোল্ডারের উপস্থিতিতে /etc/skelনতুন ফোল্ডারে অনুলিপি করা থেকে বাধা দেয় ।/home/user/skel/home/user


3
সঠিক উত্তর. +1
বিসিয়া

এটি সত্যই সঠিক উত্তর ছিল
গায়তন

এটি গুচ্ছের সেরা উত্তর; এটিই একমাত্র এটিকে জটিলতা ছাড়াই সমস্যা সমাধান করে
ZaxLofful

প্রত্যাশার মতো ঠিক অনুলিপি করার জন্য কাজ করে
চিতাবহানা

আপনি যখন এক ক্ষেত্রে সঠিক সিএমডি পতাকা ব্যবহার করেন তখন এটি পছন্দ করুন।
ট্রান ট্রায়েট

66

bashনিজেই একটি ভাল সমাধান আছে, এটি একটি আছে shell option, আপনি পারেন cp, mvএবং আরও। .:

shopt -s dotglob # for considering dot files (turn on dot files)

এবং

shopt -u dotglob # for don't considering dot files (turn off dot files)

সমাধানের উপরে bash

বিঃদ্রঃ:

shopt # without argument show status of all shell options
-u # abbrivation of unset 
-s # abbrivation of set

2
আপনি যখন গন্তব্যের অভ্যন্তরে নতুন ডিরেক্টরি তৈরি না করে কেবল বিষয়বস্তু অনুলিপি করতে চান তখন এটি দরকারী। বিশেষত যখন গন্তব্য দির মাউন্ট পয়েন্ট হয়।
kaszynek

3
এটি সত্যই সেরা উত্তর এবং প্রশ্নের হৃদয়ে
স্টিফেন

7
এটি setoptzsh এর জন্য, যদি কেউ অন্য কেউ ভাবছে।
প্যাট

25

Rsync ব্যবহার করুন:

rsync -rtv source_folder/ destination_folder/


আমার পক্ষে সেরা বিকল্প, যদিও আমি পুরো প্রক্রিয়াটিতে আরও প্রতিক্রিয়া জানাতে --pogress ব্যবহার করি।
এডেনশো

5

rsync ভাল, কিন্তু অন্য পছন্দ:

cp -a src/ dst/

প্রধান সহায়তা থেকে:

   -a, --archive
          same as -dR --preserve=all

   -d     same as --no-dereference --preserve=links

   -R, -r, --recursive
          copy directories recursively

আমি সবসময় সিপিআর ব্যবহার করি। সিপি-এ উল্লেখ করার জন্য ধন্যবাদ
পিনাকী মুখোপাধ্যায়

4

যদি আপনার উত্স এবং টার্গেট ডিরেক্টরিতে একই নাম থাকে তবে লক্ষ্য ডিরেক্টরি উপস্থিত থাকলেও আপনি কেবল টাইপ করতে পারেন:

cp -R /etc/skel /home/

এটি লুকানো ফাইল এবং ডিরেক্টরি সহ / home / এ / ইত্যাদি / স্কেল ডিরেক্টরিটি অনুলিপি করবে।

অবশেষে, আপনি ডিরেক্টরিটি অনুলিপি করতে এবং একটি একক লাইনে নাম পরিবর্তন করতে পারেন:

cp -R /etc/skel /home/ && mv /home/skel /home/user

অথবা আপনি কেবল ব্যবহার করতে পারে cp -r /etc/skel /home/userপুনঃনামকরনের জন্য skelকরতে user...
ডেভিড

এটি ঠিক, কেবল যদি / হোম / ব্যবহারকারীর উপস্থিতি না থাকে।
গ্যাব্রিয়েল হাটক্লোকক

4

আপনি rsync ব্যবহার করতে পারেন।

rsync -aP ./from/dir/ /some/other/directory/

এমনকি আপনি এসএসএসের মাধ্যমেও অনুলিপি করতে পারেন

rsync -aP ./from/dir/ username@remotehost:/some/other/directory/

আপনি ব্যবহার করতে পারেন এমন বিভিন্ন পতাকা রয়েছে: -এ, --আর্কাইভ # সংরক্ষণাগার (-rlptgoD)

-r, --recursive
-l, --links      # copy symlinks as links
-p, --perms      # preserve permissions
-t, --times      # preserve times
-g, --group      # preserve group
-o, --owner      # preserve owner
-D               # --devices --specials

--delete         # Delete extra files

You may want to add the -P option to your command.

--partial        # By default, rsync will delete any partially transferred file if the transfer is interrupted. In some circumstances it is more desirable to keep partially transferred files. Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster.

-P               # The -P option is equivalent to --partial --progress.   Its  purpose  is to make it much easier to specify these two options for a long transfer that may be interrupted.

Rsync ম্যান পেজ


4

সবচেয়ে সহজ উপায়:

cp -r /etc/skel/{.,}* /home/user

এক্সপ্রেশনটিতে {.,}*সমস্ত ফাইল এবং ডিরেক্টরি অন্তর্ভুক্ত থাকে (এছাড়াও একটি বিন্দু দিয়ে শুরু হয়)।

যদি আপনি উপরের এক্সপ্রেশনটি ব্যবহার করতে না চান তবে আপনি cpসম্পত্তিটি ব্যবহার করতে পারেন যা একটি লক্ষ্য ফোল্ডারের জন্য একাধিক উত্স নির্দিষ্ট করার ক্ষমতা:

cp -r /etc/skel/* /etc/skel/.* /home/user

1
ভালো ফাইল মিস্ হবে ..anythingবা ...anythingইত্যাদি - stackoverflow.com/a/31438355/2351568 এই সমস্যার জন্য সঠিক Regex ধারণ করে। || তবে যাইহোক ব্যবহার shopt -s dotglobকরা আরও ভাল সমাধান!
ডিজে ক্র্যাশডমি

দুর্ভাগ্যক্রমে, ডিজে ক্র্যাশড্মি আপনি কেন আপনার মনোযোগ লিখেছেন তা আমি বুঝতে পারি না। সর্বোপরি, আমার সমাধান আপনি যে কেসগুলি লিখেন সেগুলি অ্যাকাউন্টে বিবেচনা করে। শুভেচ্ছা
সিমহুমিলিকো

দুঃখিত ভুল পাঠ্য! - আপনার উত্তরের সমস্যাটি হ'ল এটিও বিবেচনা করবে .এবং ..(যা বর্তমান এবং এটির ফোল্ডারের সমতুল্য)। || তবে এখনও লিঙ্কটির উত্তর এটি আরও ব্যাখ্যা করে এবং একটি সমাধান সরবরাহ করে।
ডিজে ক্র্যাশডমি

2

মনে রাখবেন যে একটি কমান্ড-লাইন কৌশল রয়েছে (কমপক্ষে, sh , বাশ এবং ksh এ কাজ করে ): স্ল্যাশ সহ ডিরেক্টরি থেকে ডিরেক্টরিটি প্রত্যয় করুন । এই বিষয়বস্তু ঢেলে দেব থেকে মধ্যে ডিরেক্টরি করার ডিরেক্টরি (হাস্যকর, আমি প্রথমে এই কৌতুক যখন শেখা যায় ব্যবহার rsync )।

উদাহরণ:

/tmp$ mkdir test_dir1
/tmp$ cd test_dir1/
/tmp/test_dir1$ touch aa
/tmp/test_dir1$ touch .bb
/tmp/test_dir1$ cd ..
/tmp$ mkdir test_dir2

/tmp$ cp -r test_dir1/* test_dir2
/tmp$ ls -1a test_dir2
.
..
aa

/tmp$ cp -r test_dir1/ test_dir2
/tmp$ ls -1a test_dir2
.
..
.bb
aa

2

আমি এখানে একই সমস্যার সমাধানের জন্য গুগলড এসেছি, তখন আমি বুঝতে পারি যে এটি সন্ধান করা সহজ। এটি শেল, বা বিশেষ ইউটিলিটিগুলি যা ইনস্টল না করা যেতে পারে তার উপর নির্ভর করে না।

find /etc/skel/ -mindepth 1 -exec cp -r {} /home/username/ \;

আমি ট্র্যাচিং স্ল্যাশ দিয়ে ট্রিকটি চেষ্টা করেছিলাম, কিন্তু এটি আমার পক্ষে কার্যকর হয়নি।


2

এই সমস্যার সমাধান করার জন্য যখন আমার অনুমতিগুলি বজায় রাখার জন্য একটি লক্ষ্য ডিরেক্টরিতে সমস্ত ফাইল ( .ফাইল সহ ) অনুলিপি করতে হয় তখন: (ইতিমধ্যে উপস্থিত থাকলে ওভাররাইট)

yes | cp -rvp /source/directory /destination/directory/

yesগন্তব্য ফাইলগুলিকে স্বয়ংক্রিয়ভাবে ওভাররাইটিংয়ের জন্য, rপুনরাবৃত্ত, vভার্বোস, pঅনুমতি বজায় রাখা।

লক্ষ্য করুন যে উত্স পথটি একটি দিয়ে শেষ হচ্ছে না/ (সুতরাং সমস্ত ফাইল / ডিরেক্টরি এবং। ফাইলগুলি অনুলিপি করা হয়েছে)

গন্তব্য ডিরেক্টরিটি শেষ হওয়ার সাথে/ সাথে আমরা সামগ্রিকভাবে উত্স ফোল্ডারের সামগ্রীগুলি গন্তব্যে রাখছি।


1

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

cd /etc/skel
find | cpio -pdumv /home/user

-2

কমপক্ষে কে 3 বি ২.০.৩ হিসাবে, ডিরেক্টরিতে প্রকল্পটি যুক্ত হওয়ার পরে একটি প্রশ্নবাক্স পপ আপ হয় যা আপনি লুকানো ফাইলগুলি অন্তর্ভুক্ত করতে চান কিনা তা জিজ্ঞাসা করে ... এখানে একটি প্রশ্ন রয়েছে যা অন্তর্ভুক্ত সম্পর্কে জিজ্ঞাসা করতে পপ আপ করে লিঙ্ক। দারুণ জিনিস!


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