cp amri: nakili folda za faili kwa usahihi hadi * nix

cp amri: nakili folda za faili kwa usahihi hadi * nix

Makala hii itafichua baadhi ya mambo yasiyo dhahiri kuhusiana na matumizi ya kadi za mwitu wakati wa kunakili, tabia ya amri isiyoeleweka cp wakati wa kunakili, na pia njia zinazokuruhusu kunakili kwa usahihi idadi kubwa ya faili bila kuruka au kugonga.

Wacha tuseme tunahitaji kunakili kila kitu kutoka kwa /chanzo folda hadi folda inayolengwa.

Jambo la kwanza linalokuja akilini ni:

cp /source/* /target

Wacha turekebishe amri hii mara moja kwa:

cp -a /source/* /target

Muhimu -a itaongeza kunakili kwa sifa zote, haki na kuongeza kujirudia. Wakati uzazi kamili wa haki hauhitajiki, ufunguo unatosha -r.

Baada ya kunakili, tutagundua kuwa sio faili zote zilinakiliwa - faili zinazoanza na nukta kama:

.profile
.local
.mc

na kadhalika.

Kwa nini hili lilitokea?

Kwa sababu kadi za mwitu huchakatwa na ganda (bash katika kesi ya kawaida). Kwa chaguo-msingi, bash itapuuza faili zote zinazoanza na dots, kwani inazichukulia kama zilizofichwa. Ili kuepuka tabia hii itabidi tubadili tabia bash kwa kutumia amri:

shopt -s dotglob

Ili kuhakikisha kuwa mabadiliko haya ya tabia yanaendelea baada ya kuwasha upya, unaweza kuunda faili ya wildcard.sh kwa amri hii kwenye folda. /etc/profile.d (Labda usambazaji wako una folda tofauti).

Na ikiwa hakuna faili kwenye saraka ya chanzo, basi ganda halitaweza kubadilisha chochote badala ya nyota, na kunakili pia kutashindwa na kosa. Kuna chaguzi dhidi ya hali hii failglob ΠΈ nullglob. Tutahitaji kuweka failglob, ambayo itazuia amri kutekelezwa. nullglob haitafanya kazi, kwani inabadilisha kamba na kadi za mwitu ambazo hazikupata mechi kuwa kamba tupu (urefu wa sifuri), ambayo kwa cp itasababisha kosa.

Walakini, ikiwa kuna maelfu ya faili au zaidi kwenye folda, basi mbinu ya kadi-mwitu inapaswa kuachwa kabisa. Ukweli ni kwamba bash hupanua kadi za mwituni kuwa safu ndefu ya amri kama:

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

Kuna kikomo juu ya urefu wa safu ya amri, ambayo tunaweza kujua kwa kutumia amri:

getconf ARG_MAX

Wacha tupate urefu wa juu wa safu ya amri kwa ka:

2097152

Au:

xargs --show-limits

Tunapata kitu kama:

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

Kwa hivyo, wacha tufanye bila kadi-mwitu kabisa.

Hebu tu kuandika

cp -a /source /target

Na hapa tunakabiliwa na utata wa tabia cp. Ikiwa folda /lengwa haipo, basi tutapata kile tunachohitaji.

Walakini, ikiwa folda inayolengwa ipo, basi faili zitanakiliwa kwenye folda ya /target/source.

Hatuwezi kufuta folda /lengwa kila wakati mapema, kwani inaweza kuwa na faili tunazohitaji na lengo letu, kwa mfano, ni kuongeza faili katika /lengo na faili kutoka / chanzo.

Ikiwa folda za chanzo na lengwa zilipewa jina sawa, kwa mfano, tulikuwa tunakili kutoka / chanzo hadi / nyumbani / chanzo, basi tunaweza kutumia amri:

cp -a /source /home

Na baada ya kunakili, faili ndani /home/source zingeongezewa faili kutoka /source.

Hili ni tatizo la kimantiki: tunaweza kuongeza faili kwenye saraka ya marudio ikiwa folda zinaitwa sawa, lakini ikiwa ni tofauti, basi folda ya chanzo itawekwa ndani ya marudio. Jinsi ya kunakili faili kutoka / chanzo hadi / lengo kwa kutumia cp bila kadi za mwitu?

Ili kuzunguka kizuizi hiki hatari, tunatumia suluhisho lisilo dhahiri:

cp -a /source/. /target

Wale wanaofahamu DOS na Linux tayari wameelewa kila kitu: ndani ya kila folda kuna folda 2 zisizoonekana "." na "..", ambazo ni folda za uwongo za viungo vya saraka za sasa na za juu.

  • Wakati wa kunakili cp huangalia uwepo na kujaribu kuunda /target/.
  • Saraka kama hiyo ipo na ni /target
  • Faili kutoka / chanzo zinakiliwa kwa /lengwa kwa usahihi.

Kwa hivyo, itundike kwa sura ya ujasiri kwenye kumbukumbu yako au ukutani:

cp -a /source/. /target

Tabia ya amri hii iko wazi. Kila kitu kitafanya kazi bila makosa, bila kujali kama una faili milioni au huna kabisa.

Matokeo

Ikiwa unahitaji kunakili wote faili kutoka kwa folda moja hadi nyingine, hatutumii kadi za mwitu, ni bora kuzitumia badala yake cp pamoja na kipindi mwishoni mwa folda chanzo. Hii itanakili faili zote, ikiwa ni pamoja na zilizofichwa, na haitashindwa na mamilioni ya faili au hakuna faili kabisa.

Baada ya

vmspike alipendekeza toleo la amri na matokeo sawa:

cp -a -T /source /target

Oz_Alex

cp -aT /source /target

KUMBUKA: kesi ya barua T ina maana. Ikiwa unachanganya, utapata takataka kamili: mwelekeo wa kuiga utabadilika.
Shukrani:

  • Kampuni RUVDS.COM kwa usaidizi na fursa ya kuchapisha kwenye blogu yako juu ya Habre.
  • Kwa picha Dhana ya Mara tatu. Picha ni kubwa sana na ya kina, inaweza kufunguliwa kwenye dirisha tofauti.

PS Tafadhali tuma makosa yoyote utakayoona katika ujumbe wa faragha. Ninaongeza karma yangu kwa hili.

cp amri: nakili folda za faili kwa usahihi hadi * nix

Chanzo: mapenzi.com

Kuongeza maoni