සැඟවුණු ලිපිගොනු සහ සැඟවුණු නාමාවලි සහ ඒවායේ අන්තර්ගතයන් ඇතුළත් කිරීමට cp සමඟ පිටපත් කරන්නේ කෙසේද?


438

නාමාවලියක ඇති සියලුම ලිපිගොනු සහ නාමාවලි cp -rපිටපත් කරන්නේ කෙසේද?

අවශ්‍යතා:

  • සැඟවුණු ලිපිගොනු සහ සැඟවුණු නාමාවලි ඇතුළත් කරන්න.
  • ඉහත සඳහන් දෑ ඇතුළත් කිරීමට ධජයක් සහිත තනි විධානයක් වන්න.
  • රටා ගැලපීම මත කිසිසේත් රඳා සිටීමට අවශ්‍ය නැත.

මගේ කැත, නමුත් වැඩ කරන, හැක් කිරීම:

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

රටා ගැලපීමකින් තොරව මට මේ සියල්ල එක විධානයකින් කළ හැක්කේ කෙසේද? මට භාවිතා කිරීමට අවශ්‍ය ධජය කුමක්ද?


1
මෙහි තවත් පිළිතුරු, ඒවා එතරම් හොඳ නැති බව පෙනේ; serverfault.com/questions/3154/…
Roel Van de Paar

කරුණාකර, Eleven81, @ බ un නෝ පෙරෙයිරා විසින් දෙන ලද පිළිතුරට වෙනස් කිරීම සලකා බලන්න, මන්ද එය නව ෆෝල්ඩරයක් සෑදීමෙන් වළක්වයි. එසේ නොවේ නම්, මෙම අදහස නව පා readers කයන්ට අනෙක් (වඩාත්ම ඡන්දය දුන්) පිළිතුර පරීක්ෂා කිරීමට අනතුරු ඇඟවීමක් වේවා. Tx.
ආචාර්ය බෙකෝ

shopt -u dotglobසැඟවුණු ලිපිගොනු ඇතුළත් කිරීමට ධාවනය කරන්නේ කෙසේද යන්න ධාවනය කර cp -rfv /etc/skel /home/userඔබ විශාල නාමාවලියක් පිටපත් කරන්නේ නම් එය ප්‍රගතියක් පෙන්වයි.
Phemelo Khetho

Answers:


291

ලිපිගොනු සඳහන් නොකරන්න:

cp -r /etc/skel /home/user

( /home/userඑය දැනටමත් නොපවතින බව සලකන්න , නැතිනම් එය නිර්මාණය වනු ඇත /home/user/skel.)


66
පවතින්නේ නම් /home/user/skel හා සමාන දෙයක් භාවිතා කළ හැකිද?
bradley.ayers

8
@ bradley.ayers බ un නෝගේ පිළිතුර පහත දැක්වෙන්නේ ඔබේ ප්‍රශ්නයයි
මාර්ක්

1
මෙම විසඳුම මට වැඩ කළේ නැත. එය සැඟවුණු ගොනු පිටපත් කළේ නැත. මම CentOS නිකුතුව 6.5 භාවිතා කරමි. @ බ un නෝගේ විසඳුම උපක්‍රමය කළේය.
ටෙක්නෙක්ස්ට්

2
උබුන්ටු / ඩෙබියන් යටතේ මෙය ඉලක්කගත නාමාවලිය තුළ 'ස්කෙල්' නාමාවලිය ස්ථානගත කරයි. භාවිතය -Tනිසි භාවිතය සඳහා (කිසිදු ඉලක්කය) පහත එක්. ( -rTපුනරාවර්තනය සඳහා)
bshea

1
අවුරුදු 7.5 ක් පැරණි ප්‍රශ්නයකට පිළිතුරු දෙමින්, ඔබට cp -r /etc/skel/. /home/userඋප බහලුම /.සෑදීමෙන් වළක්වා ගත හැකිය ( පහත සඳහන් දෑ / ස්කෙල් සටහන් කරන්න).
කාර්පෙලියම්

504

ඔබ නව ෆෝල්ඩරය නිර්මාණය කළ බව කියමු (නැතහොත් එකක් නිර්මාණය කිරීමට යන්නේ) සහ ෆෝල්ඩරය නිර්මාණය කිරීමෙන් පසුව ගොනු එයට පිටපත් කිරීමට අවශ්‍ය බව කියමු

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

මෙමඟින් සියලුම ලිපිගොනු / ෆෝල්ඩරය /etc/skelපළමු පේළියේ දැනටමත් නිර්මාණය කර ඇති ෆෝල්ඩරයට නැවත නැවත පිටපත් කරනු ඇත .


6
මම එය වැරදියට වටහා නොගත්තේ නම්, මෙය සැඟවුණු / තිත් ගොනු පිටපත් කළේ නැත.
හැලිල් ඔස්ගර්

39
මට හොඳින් වැඩ කරයි. '.' එය වැඩ කිරීම සඳහා ඉතා වැදගත් වේ.
මාර්ක්

13
එය ක්‍රියාත්මක වේ, නමුත්, ඇයි? අත්පොතෙහි මේ පිළිබඳව සඳහනක් සොයාගත නොහැක.
ජූලියන් පලාර්ඩ්

5
සාමාන්‍යයෙන් මෙය පළමු තර්කයේ අවසාන ෆෝල්ඩරයේ නම සහිත නව ෆෝල්ඩරයක් නිර්මාණය කරන නිසා එය ක්‍රියාත්මක වන බව මම සිතමි. කෙසේ වෙතත්, එම නම වන බැවින් ., මෙම හැසිරීමට දැනටමත් පවතින නාමාවලියක් නිර්මාණය කිරීමට අවශ්‍ය වනු ඇත, එබැවින් එය එම පියවර මඟ හැරේ.
Zenexer

30
Ech ටෙක්නෙක්ස්ට් බාෂ් හි පෙරනිමි ග්ලෝබින් කිරීම මඟින් a සමඟ ආරම්භ වන ගොනු නාම ඇතුළත් නොවේ ., shopt -s dotglobඑම ගොනු ඇතුළත් කිරීමට පෙර ඔබ විධානය භාවිතා කළ යුතු බව වෙනස් කිරීමට. එබැවින් *පෙරනිමියෙන්, ඔබ ඉල්ලා සිටින්නේ පුළුල් කළ හැකි මෙම නාමාවලියෙන් සියලුම ලිපිගොනු නැවත නැවත පිටපත් කිරීමට ය *(පෙරනිමියෙන් සැඟවුණු ගොනු ඇතුළත් නොවන). .ඔබ සමඟ අනෙක් කෙළවරේ "මෙම නාමාවලියෙන්" සියල්ල නැවත නැවත පිටපත් කිරීමට cp භාවිතා කරයි.
පෙරෙයිරා

106

මෙය සිදු කිරීමේ නිවැරදි මාධ්‍යය නම් -T (--no-target-directory)විකල්පය භාවිතා කිරීම සහ නැවත නැවත ෆෝල්ඩර පිටපත් කිරීම (කප්පාදුව, තරු ලකුණු ආදිය නොමැතිව), එනම්:

cp -rT /etc/skel /home/user

මෙම අන්තර්ගතය පිටපත් කරනු /etc/skelසඳහා /home/userෆෝල්ඩරය නිර්මාණය, (සඟවා ගොනු ඇතුළුව) /home/userඑය නොපවතියි නම්, කෙසේ වෙතත්, -Tවිකල්පය ෆෝල්ඩරය පවතින්නේ /etc/skelනම් නව ෆෝල්ඩරයකට පිටපත් කිරීම වළක්වයි ./home/user/skel/home/user


4
නිවැරදි පිළිතුර. +1
bshea

ඇත්තෙන්ම මෙය නිවැරදි පිළිතුරයි
ගීතාන්

මෙය පොකුරේ හොඳම පිළිතුරයි; ගැටලුව අවුල් නොකර විසඳන එකම ක්‍රමය එයයි
සැක්ස්ලොෆුල්

අපේක්ෂා කළ පරිදි පිටපත් කිරීමට හරියටම ක්‍රියා කරයි
චෙතබාහන

ඔබ එක් අවස්ථාවකට නිවැරදි cmd ධජය භාවිතා කරන විට එයට ආදරය කරන්න.
ට්‍රාන් ට්‍රයිට්

69

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
ගමනාන්තය තුළ නව නාමාවලියක් නිර්මාණය නොකර අන්තර්ගතය පිටපත් කිරීමට ඔබට අවශ්‍ය විට එය ප්‍රයෝජනවත් වේ. විශේෂයෙන් ගමනාන්තය dir සවිකිරීමේ ස්ථානය වන විට.
kaszynek

7
setoptවෙනත් අයෙකු කල්පනා කරන්නේ නම් එය zsh සඳහා ය.
පැට්

29

Rsync භාවිතා කරන්න:

rsync -rtv source_folder/ destination_folder/


සමස්ත ක්‍රියාවලිය පිළිබඳව වැඩි ප්‍රතිපෝෂණයක් ලබා ගැනීම සඳහා මම --progress භාවිතා කළද මට හොඳම විකල්පය.
එඩෙන්ෂෝ

7

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

මම නිතරම cp -r භාවිතා කළා.
Cp

5

ඔබට rsync භාවිතා කළ හැකිය.

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

ඔබට ssh හරහා පිටපත් කළ හැකිය

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

ඔබට භාවිතා කළ හැකි විවිධ ධජ ඇත: -a, --archive # සංරක්ෂිතය (-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 man පිටුව


5

සරලම ක්‍රමය නම්:

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

ප්‍රකාශනයට {.,}*සියලුම ලිපිගොනු සහ නාමාවලි ඇතුළත් වේ (තිතකින් ආරම්භ වේ).

ඉහත ප්‍රකාශනය භාවිතා කිරීමට ඔබට අවශ්‍ය නැතිනම්, ඔබට cpදේපල භාවිතා කළ හැකිය , එය එක් ඉලක්ක ෆෝල්ඩරයක් සඳහා බහු ප්‍රභවයන් නියම කිරීමේ හැකියාවයි:

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

1
මෙයට ..anythingහෝ ...anythingවෙනත් ලිපිගොනු මග හැරෙනු ඇත - stackoverflow.com/a/31438355/2351568 මෙම ගැටළුව සඳහා නිවැරදි රීජෙක්ස් අඩංගු වේ. || කෙසේ වෙතත් භාවිතා shopt -s dotglobකිරීම තවමත් වඩා හොඳ විසඳුමයි!
DJCrashdummy

JDJCrashdummy අවාසනාවකට, ඔබ ඔබේ අවධානය ලිව්වේ ඇයිදැයි මට තේරෙන්නේ නැත. ඇත්තෙන්ම, මගේ විසඳුම ඔබ ලියන අවස්ථා සැලකිල්ලට ගනී. සුභ පැතුම්
simhumileco

කණගාටුයි වැරදි පෙළ! - ඔබේ පිළිතුරේ ඇති ගැටළුව නම්, එය ද සලකා බලනු ඇති .අතර ..(එය වත්මන් සහ එහි අඩංගු ෆෝල්ඩරයට සමාන වේ). || නමුත් තවමත් සබැඳියේ පිළිතුර එය තවදුරටත් පැහැදිලි කර විසඳුමක් සපයයි.
DJCrashdummy

4

ඔබේ ප්‍රභවයට සහ ඉලක්ක නාමාවලියට එකම නමක් තිබේ නම්, ඉලක්ක නාමාවලිය පැවතියද, ඔබට සරලව ටයිප් කළ හැකිය:

cp -R /etc/skel /home/

මෙය සැඟවුණු ලිපිගොනු සහ නාමාවලි ඇතුළුව / etc / skel නාමාවලිය / home / වෙත පිටපත් කරනු ඇත.

අවසානයේදී, ඔබට නාමාවලිය පිටපත් කර තනි පේළියකින් නම් කළ හැකිය:

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

හෝ ඔබ හුදෙක් භාවිතා කළ හැකි cp -r /etc/skel /home/userප්රතිනම්කරන සඳහා skelකිරීමට user...
ඩේවිඩ්

එය හරි, / home / user තවමත් නොපවතී නම් පමණි.
ගේබ්‍රියෙල් හෝට්ලොක්

3

මම මෙහි පැමිණියේ එකම ගැටලුවකට විසඳුමක් ලබා ගැනීම සඳහා ගූගල් කරමිනි, එවිට මට වැටහී ගියේ සොයා ගැනීම පහසුය. එහි වාසිය රඳා පවතින්නේ කවචය හෝ ස්ථාපනය නොකළ විශේෂ උපයෝගිතා මත නොවේ.

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

මම උපක්‍රමය පසුපස කප්පාදුවෙන් උත්සාහ කළ නමුත් එය මට සාර්ථක වූයේ නැත.


2

විධාන රේඛා උපක්‍රමයක් ඇති බව සලකන්න (අවම වශයෙන්, sh , bash , සහ 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

අවසර ලබාගෙන ඇති ඉලක්කගත නාමාවලියකට සියලුම ලිපිගොනු ( .ගොනු ඇතුළුව ) පිටපත් කිරීමට සිදු වූ විට මෙම ගැටළුව සඳහා මගේ විසඳුම : (දැනටමත් තිබේ නම් නැවත ලියන්න)

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

yesගමනාන්ත ලිපිගොනු ස්වයංක්‍රීයව නැවත rලිවීම, පුනරාවර්තන, vවාචික, pරඳවා ගැනීමේ අවසරයන්.

ප්‍රභව මාර්ගය a සමඟ අවසන් නොවන/ බව සලකන්න (එබැවින් සියලුම ගොනු / නාමාවලිය සහ. ගොනු පිටපත් කරනු ලැබේ)

ගමනාන්ත නාමාවලිය අවසන් වන්නේ/ අප සමස්තයක් ලෙස ප්‍රභව ෆෝල්ඩරයේ අන්තර්ගතය ගමනාන්තයට ස්ථානගත කරන හෙයිනි.


1

Cp සෑම විටම සැඟවුණු ලිපිගොනු පිටපත් නොකරන බව මම දැක ඇත්තෙමි. ඔබ සියලු ලිනක්ස් / යුනික්ස් උපභාෂා හරහා ක්‍රියා කරන විධානයක් කැමති නම් ඔබ භාවිතා කිරීමට උත්සාහ කළ යුතුය:

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

-2

අවම වශයෙන් K3b 2.0.3 වන විට, ව්‍යාපෘතියට නාමාවලිය එකතු කළ විට පැන නගින ප්‍රශ්න පෙට්ටියක් තිබේ, ඔබට සැඟවුණු ලිපිගොනු ඇතුළත් කිරීමට අවශ්‍ය දැයි විමසයි ... ඇතුළත් කිරීම ගැන විමසීමට ප්‍රශ්නයක් ද ඇත. සබැඳි. ලස්සන දේවල්!


"පැන නගින ප්‍රශ්න පෙට්ටියක්" - ෂෙල් (සීඑල්අයි) විධානයක් සඳහා?
ස්කොට්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.