Linux मध्ये copy: cp, cp -r, wildcards (* ?) आणि brace ranges
चला, सुरू करूया. Folders आणि files आपण आता चार पद्धतींनी बनवू शकतो: touch, cat, nano आणि vi. Laptop वर files चं पुढचं काम काय असतं? Copy, cut-paste, rename आणि delete. आज copy. Server वर mouse नाही, right-click नाही, म्हणून एकच command हे काम करतो: cp. आपण tree मध्ये खाली copy करणार, वर copy करणार, आणि current folder मध्ये आणणार. अख्खे folders copy करणार, एकदम अनेक files copy करणार, आणि wildcards वापरून, ज्या files ची नावं एका pattern मध्ये बसतात त्या सगळ्या. तुमचा server चालू ठेवा आणि प्रत्येक command माझ्यासोबत type करा.
या class मध्ये काय शिकणार
- Practice साठी
ravi/one/twotree बनवणं cp SOURCE DESTINATION: काय copy करायचं, आणि कुठे ठेवायचं- Tree मध्ये खाली copy, वर copy (तीन पद्धती), आणि
.ने current folder मध्ये - Backup copies, copy करतानाच rename, आणि गुपचूप होणारं overwrite (
cp -i) - Space असलेली नावं
cp -rने folders copy करणं, आणि त्याशिवाय येणारा खरा error- Destination folder आधीच असेल तर काय होतं
- बाजूच्या (sibling) folder मध्ये copy
- Folder ला स्वतःच्याच आत copy का करता येत नाही
- एकदम अनेक files: शेवटचं नाव destination
*wildcard:*.txtआणिmy*- पटकन test files:
file{1..50}.txtआणिfile{a..z}.txt ?wildcard:?आणि??- file11 ते file19 चा प्रॉब्लेम, आणि दोन बरोबर उत्तरं
- Wildcards ना naming pattern का लागतो
- Practice tasks
1. उजळणी आणि आजचं practice tree
का. Copy करायला आधी काहीतरी हवं ना. अख्खा class आपण एकच छोटं tree वापरणार, म्हणून आधी ते बनवून घ्या.
तुम्हाला आधीच माहीत असायला हवं. Folders आणि files बनवणं: Linux files: touch, cat, nano, vi, brace shortcuts, ls -R आणि tree. Paths वापरून फिरणं: Linux directories आणि paths.
कसं (home folder मधून). या तीन ओळी चालवा:
cd
mkdir -p ravi/one/two
touch my.txt
tree ravi (किंवा ls -R ravi) ने check करा:
ravi
└── one
└── two
2 directories, 0 files
म्हणजे /home/ec2-user मध्ये folder ravi आणि file my.txt; ravi मध्ये one; one मध्ये two.
Correction
Class मध्ये सांगितलं की mkdir आणि touch एकच नाव घेतात. ते एक किंवा अनेक नावं घेतात: mkdir ravi raja rani ने तीन folders, touch 1.txt 2.txt 3.txt ने तीन files. cp मध्ये नवीन वेगळंच आहे: त्याला नेहमी दोन प्रकारची नावं लागतात, source आणि destination.
2. cp: source आणि destination
का. Laptop वर right-click → Copy, दुसरा folder उघडा, right-click → Paste. Server वर दोन्ही गोष्टी एकाच ओळीत सांगायच्या.
काय. cp = copy. त्याला दोन भाग लागतात:
- Source: काय copy करायचं.
- Destination: copy कुठे ठेवायची.
- क्रम ठरलेला: आधी source, मग destination.
उदाहरण, हे my.txt file ला ravi folder मध्ये copy करतं:
cp my.txt ravi
Figure 1. cp my.txt ravi: my.txt हा source, ravi हा destination. Destination folder असेल तर copy आत जाते; नवं नाव दिलं तर दुसरी file बनते; अनेक sources असतील तर शेवटचं नाव destination folder.
cp destination कसा वाचतो:
- आधीच असलेला folder असेल तर copy त्याच नावाने आत जाते:
cp my.txt ravi→ravi/my.txt. - आधीच असलेला folder नसेल तर cp त्या नावाची file बनवतो:
cp my.txt backup.txt→ दुसरी filebackup.txt. - Original जिथे होती तिथेच राहते. Copy source मधून कधीच काही काढत नाही.
3. Tree मध्ये खाली copy
का. सगळ्यात जास्त लागणारी copy: तुम्ही जिथे आहात तिथून खालच्या folder मध्ये file.
कसं (तुम्ही /home/ec2-user मध्ये आहात):
pwd→/home/ec2-usercp my.txt ravi/one/two- Check:
ls ravi/one/two→my.txt
Destination ravi/one/two हा खाली जाणारा relative path आहे: ravi मध्ये, मग one, मग two.
4. Tree मध्ये वर copy: तीन पद्धती
का. आता तुम्ही tree मध्ये खोल आत आहात आणि file परत वर पाठवायची आहे. इथे मागच्या class चे paths कामाला येतात.
Task. तुम्ही two मध्ये आहात, आणि my.txt वर /home/ec2-user मध्ये copy करायची आहे.

Class board वरून: cp my.txt ravi: source आणि destination. मग home, ec2-user, ravi, one, two या tree वर: ec2-user मधून cp my.txt ravi/one/two खाली copy करतो; two मधून cp my.txt ../../.., cp my.txt /home/ec2-user आणि cp my.txt ~ तिघंही वर ec2-user मध्ये copy करतात.
कसं (तिघंही एकच काम करतात):
cd ~/ravi/one/two- पद्धत 1, relative:
cp my.txt ../../..(वरone, वरravi, वरec2-user) - पद्धत 2, absolute:
cp my.txt /home/ec2-user - पद्धत 3, tilde:
cp my.txt ~ - Check:
ls -l ~/my.txt→ time वरून कळतं की आत्ताच लिहिली गेली.
ec2-user मध्ये आधीच एक my.txt होती, म्हणून प्रत्येक वेळी ती बदलली गेली (इथे दोन्ही तीच रिकामी file आहे). याबद्दल section 6 मध्ये.
Dots नीट मोजा. .. म्हणजे एक level वर. two मधून एक .. म्हणजे one, दोन म्हणजे ravi, तीन म्हणजे ec2-user.
Figure 2. Animation: ec2-user मधून cp my.txt ravi/one/two खाली copy करतो; two मधून cp my.txt ../../.., /home/ec2-user किंवा ~ वर copy करतो; मग cp ravi/one/two/my.txt . file current folder मध्ये आणतो. हिरवा dashed box म्हणजे नवी copy.
Ravindra Bagale's Tip
Copy झाली की नाही शंका आहे? बघा. प्रत्येक cp नंतर destination चं ls करा. जी copy तुम्ही check केली नाही, ती फक्त झाली असेल अशी आशा आहे.
5. इथे आण: . म्हणजे हाच folder
का. कधी कधी file लांब असते आणि ती तुम्ही उभे आहात तिथे हवी असते.
काय. एक dot . म्हणजे current directory. तो पण बाकीच्यांसारखाच एक destination आहे.
कसं (तुम्ही /home/ec2-user मध्ये आहात):
cp ravi/one/two/my.txt .- Source खाली जाणारा path आहे; destination आहे
.(इथे).
Classroom line
To say "current directory", we write a dot.
Class मधलं वाक्य
Current directory म्हणायला dot लिहायचा.
Classroom line – हिंदी
"Current directory bolne ke liye dot likhenge."
my.txt इथे आधीच असेल तर हे काही न विचारता ती बदलतं (पुढचा section बघा). इथे ती तीच रिकामी file आहे, म्हणून काही जात नाही.
Dots वेगळे लक्षात ठेवा: . = इथे, .. = एक level वर, ~ = home.
6. Backup copies, copy करतानाच rename, आणि गुपचूप overwrite
का. महत्त्वाची file edit करायच्या आधी एक copy ठेवा. Edit बिघडलं तरी जुनी version तुमच्याकडे राहते.
त्याच folder मध्ये backup. Copy ला नवं नाव द्या:
cp 1.txt 2.txt2.txtनव्हती, म्हणून ती1.txtची copy म्हणून बनते.
Copy करतानाच rename. या चारही ओळी my.txt ला ravi मध्ये copy करतात:
cp my.txt ravi→ravi/my.txtcp my.txt ravi/→ तेच. Tab completion slash आपोआप लावतो; कसंही चालतं.cp my.txt ravi/my.txt→ तेच, नाव लिहून.cp my.txt ravi/my-backup.txt→raviमध्ये copy ला नवं नाव मिळतं.
Figure 3. cp 1.txt 2.txt ने backup copy बनते. 2.txt आधीच असेल तर cp ती न विचारता बदलतो, cp -i आधी विचारतो. cp my.txt my.txt fail होतं कारण source आणि destination एकच file आहे.
सांभाळून: cp न विचारता overwrite करतो. 2.txt आधीच असेल तर cp 1.txt 2.txt ती बदलून टाकतो. ना प्रश्न, ना message; 2.txt मधलं जुनं content गेलं.
सुरक्षित पद्धत: cp -i (interactive) आधी विचारतो:
cp -i 1.txt 2.txt
cp: overwrite '2.txt'?
बदलायचं असेल तर y, जुनी file ठेवायची असेल तर n type करा.
तेच नाव, तीच जागा. ही copy नाहीच:
cp my.txt my.txt
cp: 'my.txt' and 'my.txt' are the same file
Typo चा सापळा. Destination folder नसेल तर cp तक्रार करत नाही. तो त्या नावाची file बनवतो. cp my.txt rav (तुम्हाला ravi म्हणायचं होतं) गुपचूप rav नावाची file बनवतो.
Correction
Class मधल्या दोन गोष्टी. एक, cp 1.txt 2.txt असं सांगितलं जणू दुसरी copy नेहमी safe असते. 2.txt आधीच असेल तर cp ती गुपचूप overwrite करतो. Destination आधीच असू शकत असेल तर cp -i वापरा. दोन, board वरच्या backup उदाहरणात नवं नाव म्हणून तारीख वापरली होती. ravi/my-backup.txt सारखं साधं नाव तीच कल्पना तितक्याच चांगल्या पद्धतीने दाखवतं.
Ravindra Bagale's Tip
तारीख type न करता dated backup हवा? cp my.txt my-$(date +%F).txt ने my-YYYY-MM-DD.txt सारखी आजच्या तारखेची file बनते. cp चालायच्या आधी $(date +%F) च्या जागी तारीख येते.
7. Space असलेली नावं
का. Command line वर space शब्द वेगळे करतो. cp my.txt my folder म्हणजे तीन नावं: my.txt, my आणि folder.
कसं. Space असलेलं नाव single quotes मध्ये टाका:
mkdir 'my folder'cp my.txt 'my folder'- Check:
ls 'my folder'→my.txt
Classroom line
If there's a space, put it in single quotes.
Class मधलं वाक्य
"Space asel tar ... single quote madhe."
Space असेल तर ... single quote मध्ये.
Classroom line
If there's a space, put it in single quotes.
त्याहून चांगलं: नावात space वापरूच नका. my-folder किंवा my_folder वापरा.
8. Folders copy करणं: cp -r
का. File म्हणजे एकच वस्तू. Folder म्हणजे आत अजून boxes असलेला box: ravi मध्ये one, one मध्ये two, two मध्ये files असू शकतात. Folder copy करायला cp ला प्रत्येक level वरच्या प्रत्येक box च्या आत जावं लागतं.
काय. -r = recursive: परत परत, आतल्या प्रत्येक folder मध्ये जाऊन, सगळं copy. -R (capital) अगदी तेच करतो.
आधी -r शिवाय करून बघा:
cp ravi ravi1
cp: -r not specified; omitting directory 'ravi'
cp नकार देतो, आणि का ते सांगतो. काहीच copy होत नाही.
आता -r सोबत:
cp -r ravi ravi1- Check:
tree ravi1→ आत तेचone/two, files सकट.
Figure 4. डावीकडे: cp my.txt ravi एक file copy करतो. उजवीकडे: cp -r ravi ravi1 हा ravi folder आतल्या सगळ्या सकट copy करतो. -r शिवाय cp म्हणतो -r not specified; omitting directory 'ravi'.
अजून उदाहरणं:
mkdir -p one/two/three, मगcp -r ravi one/two/three→raviची copy, आतल्या सगळ्या सकट,threeमध्ये.cp -r ravi ~/ravi-backup→ अख्ख्या folder चा backup.
Classroom line
But there's also a trick...
Class मधलं वाक्य
पण एक जुगाड असा पण आहे...
Classroom line – हिंदी
"Lekin ek jugaad aisa bhi hai..."
जुगाड असा: cp -r my.txt ravi एका file वर पण चालतो. पण त्याने काही मिळत नाही. File मध्ये आत जायला काहीच नसतं. सवय साफ ठेवा: files साठी साधा cp, folders साठी cp -r.
Classroom line
Go on, try it yourself.
Class मधलं वाक्य
"Bagha, karun bagha."
बघा, करून बघा.
Classroom line
Go on, try it yourself.
Correction
Board वर "-r शिवाय चालणार नाही" एवढंच सांगितलं. खरं काय दिसतं ते हे: cp: -r not specified; omitting directory 'ravi'. cp folder सोडून देतो, पण त्याच command मध्ये दिलेल्या files मात्र copy करतो.
9. Destination folder आधीच असेल तेव्हा
का. cp -r ravi ravi1 दुसऱ्यांदा चालवला की वेगळं वागतो. हे माहीत नसेल तर folders मध्ये folders होऊन बसतात.
हे कसं वागतं:
- पहिल्यांदा,
ravi1नाहीये:cp -r ravi ravi1नेravi1हीraviची पूर्ण copy बनते. - दुसऱ्यांदा,
ravi1आता आहे:cp -r ravi ravi1नवी copy त्याच्या आत टाकतो,ravi1/raviम्हणून. - Check:
ls ravi1→one ravi
Files सारखाच नियम: destination आधीच असलेला folder असेल तर copy आत जाते.
Figure 5. पहिल्या cp -r ravi ravi1 ने ravi1 ही ravi ची copy बनते. दुसऱ्यांदा, ravi1 आधीच असताना, नवी copy आत जाते: ravi1/ravi.
Correction
Class मध्ये फक्त पहिल्यांदाचं दाखवलं. ravi1 आधीच असेल तर cp -r ravi ravi1 copy ला ravi1/ravi म्हणून आत ठेवतो. आधी आणि नंतर ls ravi1 ने check करा.
10. बाजूला copy: sibling folder मध्ये
का. एकमेकांच्या बाजूला असलेले folders (siblings) नेहमी दिसतात: dev आणि prod, old आणि new.
Setup. /home/ec2-user मध्ये दोन folders, ram आणि sham. तुम्ही ram मध्ये आहात, आणि ram मध्ये m.txt file आहे.
cd
mkdir ram sham
touch ram/m.txt
cd ram
कसं (दोन पद्धती):
cp m.txt ../sham→..वरec2-userमध्ये, मगshamमध्ये.cp m.txt ~/sham→ home मधून थेटshamमध्ये.- Check:
ls ~/sham→m.txt
11. Folder ला स्वतःच्याच आत copy करता येत नाही
का. हे साधी copy वाटते, पण होऊच शकत नाही. का ते समजलं की cp folders मधून कसा फिरतो ते कळतं.
Setup. one मध्ये two आहे (mkdir -p one/two). आता one ला two मध्ये copy करायचं.
-r शिवाय, नेहमीचा message:
cp one one/two
cp: -r not specified; omitting directory 'one'
-r सोबत, विचार करा:
- cp
oneलाtwoमध्ये copy करतो. - पण
twoतरoneच्या आत आहे, म्हणजेoneच्या copy मध्येtwoपण यायला हवा... - ...आणि त्यात परत
oneची copy, त्यात परतtwo, असं चालूच. - हे कधीच संपणार नाही: एक endless loop.
Linux ते लगेच थांबवतो आणि काहीच copy करत नाही:
cp -r one one/two
cp: cannot copy a directory, 'one', into itself, 'one/two/one'
Figure 6. cp -r one one/two म्हणजे one ला त्याच्याच आतल्या two मध्ये टाकणं, म्हणजे copy परत परत स्वतःलाच आत घेईल. cp ते cannot copy a directory into itself म्हणून थांबवतो. one बाहेरच्या folder मध्ये, जसं ~/backup, copy केला तर चालतं.
नियम: destination हा source च्या आत नसावा. cp -r one ~/backup चालतं.
Correction
Class मध्ये याला "deadlock" म्हटलं, "कुठेच थांबणार नाही" असं. Deadlock हा चुकीचा शब्द आहे (त्याचा अर्थ दोन गोष्टी एकमेकांची वाट बघत अडकणं). विचार मात्र बरोबर आहे: हा endless loop झाला असता, जो Linux थांबवतो. GNU cp सुरू व्हायच्या आधीच हे ओळखतो आणि cannot copy a directory, 'one', into itself, 'one/two/one' म्हणून लगेच थांबतो.
12. एकदम अनेक files copy करणं
का. दहा files साठी दहा commands म्हणजे वेळ वाया. एक cp अनेक sources घेऊ शकतो.
काय.
- हवे तितके sources देता येतात.
- शेवटचं नाव नेहमी destination असतं.
- एकापेक्षा जास्त sources असतील तर destination आधीच असलेला folder हवा.
कसं (तुम्ही /home/ec2-user मध्ये आहात). Files बनवा, मग तिन्ही एकाच वेळी copy करा:
touch you.txt my.mp3
cp my.txt you.txt my.mp3 ravi
Check: ls ravi → my.mp3, my.txt आणि you.txt आता तिथे आहेत, one आणि आधी copy केलेल्या गोष्टींच्या शेजारी.

Class board वरून: ls मध्ये my.txt, you.txt, ravi आणि my.mp3 दिसतात. cp my.txt you.txt my.mp3 ravi तिन्ही files copy करतो, आणि शेवटचं नाव, ravi, destination म्हणून दाखवलंय.
शेवटचं नाव folder नसेल तर cp थांबतो:
cp my.txt you.txt my.mp3
cp: target 'my.mp3' is not a directory
नवीन coreutils versions मध्ये हे cp: target 'my.mp3': Not a directory असं येतं; अर्थ तोच.
Classroom line
You only got the feeling it worked; in reality it didn't happen.
Class मधलं वाक्य
"Te feel dila tumhi, reality madhe nahi zalay te."
ते feel दिलं तुम्ही, reality मध्ये नाही झालंय ते.
Classroom line
You only got the feeling it worked; in reality it didn't happen.
म्हणूनच नेहमी ls ने check करायचं.
13. * wildcard
का. प्रत्येक file चं नाव type करणं जमत नाही. सहसा नावांमध्ये काहीतरी common असतं: सगळी .txt ने संपतात, सगळी my ने सुरू होतात. Wildcards ने नावांची list देण्याऐवजी pattern सांगता येतो.
काय. * म्हणजे कुठलेही characters, कितीही, अगदी शून्य पण.
कसं:
cp *.txt ravi→.txtने संपणारं प्रत्येक नाव.cp my* ravi→myने सुरू होणारं प्रत्येक नाव (my.txt,my.mp3,my.mp4...).

Class board वरून: ls मध्ये my.txt, you.txt, ravi, my.mp3, 1.txt, 2.txt ते 50.txt, my.logs आणि my.mp4. मग cp *.txt ravi हे .txt ने संपणारं प्रत्येक नाव copy करतो, आणि cp my* ravi हे my ने सुरू होणारं प्रत्येक नाव.
Figure 7. बारा नावांवर animation: *.txt हे .txt ने संपणारं प्रत्येक नाव उचलतं, my* हे my ने सुरू होणारी नावं, file?.txt हे file1.txt आणि filea.txt, file??.txt हे file11.txt आणि fileaa.txt, आणि Ram* हे Ram आणि Ramayan.
Matching कोण करतं? Shell, cp नाही. cp सुरू व्हायच्या आधी bash *.txt च्या जागी जुळणारी नावं ठेवतो. echo ने आधी बघा, तो काहीच बनवत नाही, copy करत नाही:
echo *.txt→ उदाहरणार्थ1.txt 2.txt my.txt you.txtecho my*→ उदाहरणार्थmy.mp3 my.txt
काहीच match झालं नाही तर bash pattern तसाच पुढे देतो, आणि cp *.pdf नावाची file शोधतो:
cp *.pdf ravi
cp: cannot stat '*.pdf': No such file or directory
एखादा folder match झाला तर, उदाहरणार्थ my.logs नावाचा folder, साधा cp my* ravi files copy करतो आणि folder cp: -r not specified; omitting directory 'my.logs' म्हणून सोडून देतो.
.txt सारखी extensions माणसांसाठी आणि programs साठी असतात; Linux साठी ती नावाचाच भाग. म्हणूनच *.txt चालतं: ते फक्त अक्षरं जुळवतं, बाकी काही नाही.
14. पटकन test files: brace ranges
का. Wildcards practice करायला भरपूर files लागतात. पन्नास touch commands कोण type करणार?
काय. दोन dots असलेले braces range बनवतात:
touch file{1..50}.txt→file1.txtतेfile50.txt(50 files)touch file{a..z}.txt→filea.txtतेfilez.txt(26 files)touch file{10..20}.txt→file10.txtतेfile20.txt(11 files; कुठलीही सुरुवात आणि शेवट चालतो)touch file{01..12}.txt→file01.txtतेfile12.txt(पुढचा zero प्रत्येक number ला pad करतो)
आधी echo ने बघा: echo file{1..5}.txt → file1.txt file2.txt file3.txt file4.txt file5.txt
हा files chapter मधलाच {Ram,Laxman} brace shortcut आहे, फक्त list ऐवजी range.
15. ? wildcard: बरोबर एक character
का. * हावरट आहे: कितीही लांबीचं काहीही जुळवतो. कधी कधी "इथे बरोबर एकच character" हवं असतं.
काय. ? म्हणजे बरोबर एक character. ?? म्हणजे बरोबर दोन.
कसं. चार files घ्या, file1.txt, filea.txt, file11.txt आणि fileaa.txt:
cp file?.txt ravi→file1.txtआणिfilea.txt(fileनंतर एक character)cp file??.txt ravi→file11.txtआणिfileaa.txt(दोन characters)

Class board वरून: चार files: file1.txt, filea.txt, file11.txt आणि fileaa.txt. cp file?.txt ravi हे file नंतर एक character असलेल्या copy करतो, cp file??.txt ravi दोन असलेल्या. उजवीकडे touch file{a..z}.txt ने filea.txt, fileb.txt वगैरे बनतात.
मोजून बघा. file{1..50}.txt, file{a..z}.txt आणि fileaa.txt असलेल्या folder मध्ये:
file?.txt→ 35 नावं (file1 ते file9, आणि filea ते filez)file??.txt→ 42 नावं (file10 ते file50, आणि fileaa)
16. file11 ते file19 चा प्रॉब्लेम
Task. Folder मध्ये file1.txt ते file50.txt आहेत. फक्त file11.txt ते file19.txt ravi मध्ये copy करा.
मोह पाडणारं उत्तर चुकीचं आहे: cp file1* ravi. * रिकामा असू शकतो, म्हणून file1* हे जुळवतं:
- स्वतः
file1.txt(1 नंतर काहीच नाही) file10.txt(अजून एक digit, पण तो 10 आहे, 11 ते 19 नाही)file11.txtतेfile19.txt- आणि
file100.txt, असेल तर
शब्दांमध्ये पण हाच सापळा: Ram* हे Ram, Rama आणि Ramayan जुळवतं.
बरोबर उत्तर 1: brace range. आधीच असलेल्या files साठी पण चालतं, कारण cp सुरू व्हायच्या आधी shell नावं लिहून काढतो:
cp file{11..19}.txt ravi
बरोबर उत्तर 2: brackets. [1-9] म्हणजे 1 ते 9 मधलं एक character:
cp file1[1-9].txt ravi
Figure 8. file1 ते file20 असे वीस boxes. cp file1* ravi चुकून file1 आणि file10 पण घेतो. cp file{11..19}.txt ravi आणि cp file1[1-9].txt ravi बरोबर file11 ते file19 घेतात.
दोघांमधला फरक:
- Braces नावं बनवतात, files असोत किंवा नसोत. एखादी नसेल तर cp तिच्यासाठी
cp: cannot stat 'file19.txt': No such file or directoryदाखवतो आणि बाकीच्या copy करतो. - Wildcards आणि brackets फक्त असलेलीच नावं उचलतात. नसलेली file उचललीच जात नाही.
Correction
Class मध्ये braces "फक्त files बनवण्यासाठी" असं धरलं, आणि file11 ते file19 ची copy सुटली नाही; board वर file1* पण दाखवलं, जे चुकीचं आहे. दोन्ही बरोबर उत्तरं वर आहेत: cp file{11..19}.txt ravi आणि cp file1[1-9].txt ravi. लक्षात ठेवा, file1* स्वतः file1.txt पण जुळवतो, कारण * शून्य characters पण जुळवू शकतो.
17. Wildcards ना naming pattern लागतो
का. Wildcard फक्त नावांमधलं common तेवढंच सांगू शकतो. नावांमध्ये काहीच common नसेल तर लिहायला pattern च नाही.
Classroom line
Wildcards work only where the names follow a pattern.
Class मधलं वाक्य
"Wildcard tithech apply hota jithe ek pattern tayar hota."
Wildcard तिथेच apply होतं जिथे एक pattern तयार होतो.
Classroom line
Wildcards work only where the names follow a pattern.
प्रत्यक्षात:
report-jan.txt,report-feb.txt,report-mar.txt→report-*.txtसगळ्या उचलतो.a.txt,notes,final_v2.doc→ कामाचा pattern नाही; एक एक नाव द्या.log01तेlog30(zero-padded) →log0?01 ते 09 उचलतो,log1?10 ते 19. Zero नसेल तरlog1*लाlog1पण सापडतो.
Ravindra Bagale's Tip
पुढे लागणाऱ्या wildcard चा विचार करून नावं द्या: तोच prefix, तेच extension, numbers ला पुढे zero. खऱ्या server वर यामुळेच "मागच्या महिन्याचे सगळे logs" एका ओळीत copy किंवा साफ करता येतात. Copy, move आणि remove च्या अजून commands: 3.3 Working with files and directories.
18. Practice
Try at home
Task 1: वर, खाली, इथे
~मध्येravi/one/twoआणिmy.txtबनवा (section 1).~मधूनmy.txtलाtwoमध्ये copy करा.twoमध्येcdकरा आणि तीन पद्धतींनी परत वर copy करा:../../..,/home/ec2-user,~.- Home ला जा आणि
.वापरूनravi/one/two/my.txtइथे आणा.
Task 2: backups
echo old > 2.txt,echo new > 1.txt, मगcp 1.txt 2.txt.2.txtवाचा.oldचं काय झालं?cp -iने परत करा आणिnउत्तर द्या.- एका command मध्ये
my.txtपासूनravi/my-backup.txtबनवा.
Task 3: folders
cp ravi ravi1. Error वाचा.cp -r ravi ravi1, मग परत चालवा.ls ravi1काय दाखवतो ते समजावून सांगा.cp -r one one/twoकरून बघा आणि message वाचा.
Task 4: wildcards
- नवीन folder
wमध्ये:touch file{1..50}.txt file{a..z}.txt fileaa.txt - आधी अंदाज करा, मग
echoने check करा:file?.txt,file??.txt,file1*,file*a.txt. - फक्त
file11.txtतेfile19.txtfolderrमध्ये copy करा, दोन्ही पद्धतींनी. - या folder मध्ये
cp file?.txt rफक्तfile1.txtतेfile9.txtनाही, जास्त copy करतो. का? फक्त त्या नऊ brackets वापरून copy करा.
Error आला तर हळू वाचा: cp जवळजवळ नेहमी नक्की काय चुकलं ते सांगतो. झालं की console मधून instance stop करा.
Classroom line
If you get an error, ask me.
Class मधलं वाक्य
"Error asel tar mala vichara."
Error असेल तर मला विचारा.
Classroom line
If you get an error, ask me.
Recap
थोडक्यात
cp SOURCE DESTINATION: आधी काय, मग कुठे. Source कधीच काढला जात नाही.- Destination folder असेल → copy आत जाते. दुसरं कुठलंही नाव → त्या नावाची file.
- खाली:
cp my.txt ravi/one/two.twoमधून वर:../../..,/home/ec2-userकिंवा~. इथे:. cp 1.txt 2.txtने backup बनतो, आणि2.txtअसेल तर ती गुपचूप overwrite होते.cp -iआधी विचारतो.cp my.txt my.txt→are the same file. Folder च्या नावात typo झाला तर folder ऐवजी file बनते.- Space असलेली नावं quotes मध्ये:
'my folder'. त्याहून चांगलं, space टाळा. - Folders ना
cp -r(किंवा-R) लागतो. नाहीतर:-r not specified; omitting directory. ravi1असताना परतcp -r ravi ravi1→ravi1/ravi.- Folder स्वतःच्या आतल्या folder मध्ये जाऊ शकत नाही:
cannot copy a directory ... into itself. Endless loop, जो Linux थांबवतो. - अनेक sources: शेवटचं नाव destination, आणि तो folder हवा.
*= कुठलेही characters (शून्य पण);?= बरोबर एक. Shell ते expand करतो;echoने आधी बघा.touch file{1..50}.txt,file{a..z}.txt: brace ranges ने पटकन नावं.- फक्त file11 ते file19:
cp file{11..19}.txt raviकिंवाcp file1[1-9].txt ravi.file1*नाही. - Wildcards ना naming pattern लागतो: नावं विचार करून द्या.
Samjla ka? Ghari sagle tasks karun bagha ani pratyek cp nantar ls ne check kara.
Ravindra Bagale, trainer: linkedin.com/in/ravindra-bagale. Folders आणि files ची नावं (ravi, one, two, ram, sham, my.txt, file1.txt वगैरे) शिकण्यासाठीची उदाहरणं आहेत. Commands चे outputs आणि error messages GNU bash आणि coreutils वर तपासले, जे Amazon Linux 2023 पण वापरतं.