cp ትዕዛዝ: የፋይል ማህደሮችን በትክክል ወደ * nix ይቅዱ

cp ትዕዛዝ: የፋይል ማህደሮችን በትክክል ወደ * nix ይቅዱ

ይህ ጽሑፍ ከአጠቃቀም ጋር የተያያዙ አንዳንድ ግልጽ ያልሆኑ ነገሮችን ያሳያል ካርዶች በሚገለበጥበት ጊዜ, አሻሚ የትእዛዝ ባህሪ cp በሚገለበጥበት ጊዜ እንዲሁም ብዙ ቁጥር ያላቸውን ፋይሎች ሳይዘለሉ ወይም ሳይበላሹ በትክክል ለመቅዳት የሚያስችልዎ ዘዴዎች።

ሁሉንም ነገር ከ/ምንጭ ፎልደር ወደ/ዒላማ ማህደር መቅዳት አለብን እንበል።

ወደ አእምሮ የሚመጣው የመጀመሪያው ነገር:

cp /source/* /target

ይህን ትዕዛዝ ወዲያውኑ ወደሚከተለው እናርመው፡-

cp -a /source/* /target

ቁልፍ -a የሁሉንም ባህሪያት, መብቶችን መቅዳት እና ድግግሞሽን ይጨምራል. የመብቶች ትክክለኛ ማባዛት በማይፈለግበት ጊዜ ቁልፍ በቂ ነው። -r.

ከተገለበጥን በኋላ ሁሉም ፋይሎች እንዳልተቀዱ እናገኘዋለን - በነጥብ የሚጀምሩ ፋይሎች፡-

.profile
.local
.mc

እና የመሳሰሉት.

ይህ ለምን ሆነ?

የዱር ካርዶች የሚሠሩት በሼል ስለሆነ (bash በተለመደው ሁኔታ). በነባሪነት bash በነጥብ የሚጀምሩትን ፋይሎች ሁሉ እንደ ስውር ስለሚቆጥራቸው ችላ ይላቸዋል። ይህንን ባህሪ ለማስወገድ ባህሪን መለወጥ አለብን bash ትዕዛዙን በመጠቀም:

shopt -s dotglob

ዳግም ከተነሳ በኋላ ይህ የባህሪ ለውጥ መቀጠሉን ለማረጋገጥ በፎልደሩ ውስጥ በዚህ ትዕዛዝ የ Wildcard.sh ፋይል መፍጠር ይችላሉ። /etc/profile.d (ምናልባት የእርስዎ ስርጭት የተለየ አቃፊ አለው)።

እና በምንጭ ማውጫ ውስጥ ምንም ፋይሎች ከሌሉ ዛጎሉ በኮከብ ቦታው ላይ ምንም ነገር መተካት አይችልም ፣ እና መቅዳት እንዲሁ በስህተት አይሳካም። በዚህ ሁኔታ ላይ አማራጮች አሉ failglob и nullglob. ማዘጋጀት ያስፈልገናል failglob, ይህም ትዕዛዙ እንዳይፈፀም ይከላከላል. nullglob አይሠራም ፣ ምክንያቱም ተዛማጅ ያላገኙ የዱር ካርዶች ያለው ሕብረቁምፊ ወደ ባዶ ሕብረቁምፊ (ዜሮ ርዝመት) ስለሚቀይረው ለ cp ስህተት ይፈጥራል።

ነገር ግን፣ በአቃፊው ውስጥ በሺዎች የሚቆጠሩ ፋይሎች ወይም ከዚያ በላይ ካሉ፣ እንግዲያውስ የዱር ካርዶች አቀራረብ ሙሉ በሙሉ መተው አለበት። እውነታው ይህ ነው። bash የዱር ካርዶችን ወደ በጣም ረጅም የትእዛዝ መስመር ያሰፋል፡-

cp -a /souce/a /source/b /source/c …… /target

በትእዛዙ መስመር ርዝመት ላይ ገደብ አለ, ይህም ትዕዛዙን ተጠቅመን ማወቅ እንችላለን:

getconf ARG_MAX

ከፍተኛውን የትእዛዝ መስመር ርዝመት በባይት እናገኝ፡-

2097152

ወይም:

xargs --show-limits

እንደዚህ ያለ ነገር እናገኛለን

….
Maximum length of command we could actually use: 2089314
….

ስለዚህ፣ ያለ ዱር ካርዶችን ሙሉ በሙሉ እናድርግ።

በቃ እንፃፍ

cp -a /source /target

እና እዚህ የባህሪ አሻሚነት አጋጥሞናል cp. የ / ዒላማ ማህደሩ ከሌለ, እኛ የምንፈልገውን እናገኛለን.

ነገር ግን፣ የታለመው አቃፊ ካለ፣ ፋይሎቹ ወደ / target/source አቃፊው ይገለበጣሉ።

የምንፈልጋቸውን ፋይሎች ሊይዝ ስለሚችል ሁል ጊዜ አስቀድመን መሰረዝ አንችልም እና ግባችን በ / ኢላማ ውስጥ ያሉ ፋይሎችን ከ / ምንጭ ፋይሎች ጋር መሙላት ነው።

የምንጭ እና የመድረሻ ማህደሮች ተመሳሳይ ስም ከተሰየሙ፣ ለምሳሌ ከ/ምንጭ ወደ/ቤት/ምንጭ እየገለበጥን ነበር፣እንግዲያውስ ትዕዛዙን መጠቀም እንችላለን፡-

cp -a /source /home

እና ከተገለበጡ በኋላ በ/ቤት/ምንጭ ውስጥ ያሉ ፋይሎች ከ/ምንጭ በመጡ ፋይሎች ይሞላሉ።

ይህ አመክንዮአዊ ችግር ነው፡ ማህደሮች ተመሳሳይ ከተሰየሙ ፋይሎችን በመድረሻ መዝገብ ውስጥ ማከል እንችላለን ነገር ግን የተለያዩ ከሆኑ የምንጭ ማህደሩ በመድረሻው ውስጥ ይቀመጣል። ያለ ዱር ካርድ ሲፒ በመጠቀም ፋይሎችን ከ/ምንጭ ወደ / ኢላማ እንዴት መቅዳት ይቻላል?

ይህንን ጎጂ ውሱንነት ለመፍታት፣ ግልጽ ያልሆነ መፍትሄ እንጠቀማለን፡-

cp -a /source/. /target

DOS እና ሊኑክስን የሚያውቁ ሁሉንም ነገር አስቀድመው ተረድተዋል በእያንዳንዱ አቃፊ ውስጥ 2 የማይታዩ አቃፊዎች "" አሉ። እና “..”፣ እነሱም የውሸት አቃፊዎች ከአሁኑ እና ከፍተኛ ማውጫዎች ጋር የሚያገናኙ ናቸው።

  • በሚገለበጥበት ጊዜ cp መኖሩን ይፈትሻል እና /ዒላማ/ ለመፍጠር ይሞክራል።
  • እንደዚህ ያለ ማውጫ አለ እና እሱ / ዒላማ ነው።
  • ፋይሎች ከ/ምንጭ በትክክል ወደ/ዒላማ ይገለበጣሉ።

ስለዚህ፣ በማስታወሻዎ ውስጥ ወይም በግድግዳው ላይ በደማቅ ክፈፍ ውስጥ ይስቀሉት፡

cp -a /source/. /target

የዚህ ትዕዛዝ ባህሪ ግልጽ ነው. አንድ ሚሊዮን ፋይሎች ቢኖሩዎትም ሆነ ምንም ሳይሆኑ ሁሉም ነገር ያለ ስህተቶች ይሰራል።

ግኝቶች

መቅዳት ከፈለጉ ሁሉም ፋይሎችን ከአንድ አቃፊ ወደ ሌላ, እኛ የዱር ካርዶችን አንጠቀምም, በምትኩ እነሱን መጠቀም የተሻለ ነው cp ከምንጩ አቃፊው መጨረሻ ላይ ካለው ጊዜ ጋር ተጣምሮ። ይህ የተደበቁትን ጨምሮ ሁሉንም ፋይሎች ይገለበጣል፣ እና በሚሊዮኖች በሚቆጠሩ ፋይሎች ወይም ምንም ፋይሎች ጨርሶ አይሳካም።

ከቃል በኋላ

vmspike ተመሳሳይ ውጤት ያለው የትዕዛዝ ስሪት ጠቁሟል፡-

cp -a -T /source /target

ኦዝ_አሌክስ

cp -aT /source /target

ማስታወሻ፡ የደብዳቤ መያዣ T የሚል ትርጉም አለው። ካዋሃዱት, ሙሉ በሙሉ ቆሻሻን ያገኛሉ: የመቅዳት አቅጣጫው ይለወጣል.
አመሰግናለሁ:

  • ኩባንያዎች RUVDS.COM ለድጋፍ እና በኔ ብሎግ ላይ የማተም እድል በ Habré.
  • በምስል የሶስትዮሽ ጽንሰ-ሐሳብ. ስዕሉ በጣም ትልቅ እና ዝርዝር ነው, በተለየ መስኮት ውስጥ ሊከፈት ይችላል.

PS እባክዎን በግል መልእክት ያስተዋሉ ስህተቶችን ይላኩ። ለዚህ ካርማዬን እጨምራለሁ.

cp ትዕዛዝ: የፋይል ማህደሮችን በትክክል ወደ * nix ይቅዱ

ምንጭ: hab.com

አስተያየት ያክሉ