អត្ថបទនេះនឹងបង្ហាញពីអ្វីដែលមិនច្បាស់លាស់មួយចំនួនទាក់ទងនឹងការប្រើប្រាស់ cp
នៅពេលចម្លង ក៏ដូចជាវិធីសាស្រ្តដែលអនុញ្ញាតឱ្យអ្នកចម្លងឯកសារមួយចំនួនធំបានត្រឹមត្រូវដោយមិនរំលង ឬគាំង។
ចូរនិយាយថាយើងត្រូវចម្លងអ្វីគ្រប់យ៉ាងពីថត /source ទៅថត /target ។
រឿងដំបូងដែលគិតគឺ៖
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 មិនមានទេនោះយើងនឹងទទួលបានអ្វីដែលយើងត្រូវការ។
ទោះយ៉ាងណាក៏ដោយ ប្រសិនបើថតគោលដៅមាន នោះឯកសារនឹងត្រូវបានចម្លងទៅថត /target/source ។
យើងមិនអាចលុបថត /target ជាមុនបានទេ ព្រោះវាអាចមានឯកសារដែលយើងត្រូវការ ហើយគោលដៅរបស់យើងគឺដើម្បីបំពេញបន្ថែមឯកសារក្នុង /target ជាមួយឯកសារពី /source។
ប្រសិនបើថតប្រភព និងទិសដៅត្រូវបានដាក់ឈ្មោះដូចគ្នា ឧទាហរណ៍ យើងកំពុងចម្លងពី /source ទៅ /home/source នោះយើងអាចប្រើពាក្យបញ្ជា៖
cp -a /source /home
ហើយបន្ទាប់ពីចម្លង ឯកសារនៅក្នុង /home/source នឹងត្រូវបានបំពេញបន្ថែមដោយឯកសារពី /source។
នេះជាបញ្ហាឡូជីខល៖ យើងអាចបន្ថែមឯកសារក្នុងថតទិសដៅ ប្រសិនបើថតត្រូវដាក់ឈ្មោះដូចគ្នា ប៉ុន្តែប្រសិនបើពួកវាខុសគ្នា នោះថតប្រភពនឹងត្រូវបានដាក់នៅខាងក្នុងគោលដៅ។ តើធ្វើដូចម្តេចដើម្បីចម្លងឯកសារពី /source ទៅ /target ដោយប្រើ cp ដោយគ្មានអក្សរជំនួស?
ដើម្បីទទួលបានដែនកំណត់ដ៏គ្រោះថ្នាក់នេះ យើងប្រើដំណោះស្រាយដែលមិនច្បាស់លាស់៖
cp -a /source/. /target
អ្នកទាំងឡាយណាដែលស្គាល់ DOS និង Linux បានយល់គ្រប់យ៉ាងរួចហើយ៖ នៅខាងក្នុងថតនីមួយៗមាន 2 ថតដែលមើលមិនឃើញ "" ។ និង ".." ដែលជាថតឯកសារភ្ជាប់ទៅថតបច្ចុប្បន្ន និងខ្ពស់ជាងនេះ។
- នៅពេលចម្លង
cp
ពិនិត្យរកអត្ថិភាព ហើយព្យាយាមបង្កើត /target/ ។ - ថតបែបនេះមាន ហើយវាគឺជា / គោលដៅ
- ឯកសារពី /source ត្រូវបានចម្លងទៅ /target យ៉ាងត្រឹមត្រូវ។
ដូច្នេះ សូមព្យួរវានៅក្នុងស៊ុមដិតមួយនៅក្នុងការចងចាំរបស់អ្នក ឬនៅលើជញ្ជាំង៖
cp -a /source/. /target
ឥរិយាបថនៃពាក្យបញ្ជានេះគឺច្បាស់។ អ្វីៗនឹងដំណើរការដោយគ្មានកំហុស មិនថាអ្នកមានឯកសារមួយលាន ឬគ្មានឯកសារអ្វីទាំងអស់។
ការរកឃើញ
ប្រសិនបើអ្នកត្រូវការចម្លង ទាំងអស់ ឯកសារពីថតមួយទៅថតមួយទៀត យើងមិនប្រើអក្សរជំនួសទេ វាជាការប្រសើរក្នុងការប្រើពួកវាជំនួសវិញ។ cp
រួមបញ្ចូលជាមួយរយៈពេលនៅចុងបញ្ចប់នៃថតប្រភព។ វានឹងចម្លងឯកសារទាំងអស់ រួមទាំងឯកសារដែលលាក់ ហើយនឹងមិនបរាជ័យជាមួយឯកសាររាប់លាន ឬគ្មានឯកសារអ្វីទាំងអស់។
Afterword
cp -a -T /source /target
cp -aT /source /target
ចំណាំ៖ ករណីអក្សរ T
មានអត្ថន័យ។ ប្រសិនបើអ្នកលាយវា អ្នកនឹងទទួលបានសំរាមទាំងស្រុង៖ ទិសដៅចម្លងនឹងផ្លាស់ប្តូរ។
សូមអរគុណ៖
- ក្រុមហ៊ុន
RUVDS.COM សម្រាប់ការគាំទ្រ និងឱកាសដើម្បីផ្សព្វផ្សាយនៅលើប្លក់របស់អ្នកនៅលើ Habre ។ - តាមរូបភាព
គំនិតបី . រូបភាពមានទំហំធំ និងលម្អិតអាចបើកក្នុងបង្អួចដាច់ដោយឡែក។
PS សូមផ្ញើកំហុសណាមួយដែលអ្នកកត់សម្គាល់នៅក្នុងសារឯកជន។ ខ្ញុំបង្កើនកម្មផលរបស់ខ្ញុំសម្រាប់រឿងនេះ។
ប្រភព: www.habr.com