ធ្វើការជាមួយ File និង Folder

មាតិកា

  1. បង្កើត Folder៖ mkdir
  2. បង្កើត File៖ touch
  3. ការចម្លង៖ cp
  4. ការផ្លាស់ទី និងការប្តូរឈ្មោះ៖ mv
  5. ការលុប៖ rm និង rmdir
  6. Wildcard៖ ធ្វើការជាមួយ File ច្រើនក្នុងពេលតែមួយ
  7. ឈ្មោះដែលមានដកឃ្លា និងតួអក្សរចម្លែក
  8. សាកល្បងដោយខ្លួនឯង

អ្វីៗទាំងអស់ក្នុងជំពូកនេះធ្វើឡើងនៅក្នុង folder អនុវត្តរបស់អ្នក។ មុនពេលចាប់ផ្តើម សូមចូលទៅទីនោះ៖

cd ~/cli-practice

បើវាមិនទាន់មាននៅឡើយ សូមត្រឡប់ទៅចុងបញ្ចប់នៃ ការផ្លាស់ទីក្នុង File System ហើយបង្កើតវាជាមុនសិន។

1. បង្កើត Folder៖ mkdir

អ្នកបានប្រើ mkdir (make directory) រួចហើយដើម្បីបង្កើត folder។ ផ្តល់ឲ្យវានូវឈ្មោះមួយ ឬច្រើន៖

mkdir drafts
mkdir music videos

ចុះបើអ្នកចង់បាន folder ដែលនៅជ្រៅច្រើនកម្រិត ដូចជា projects/website/src ហើយ website មិនទាន់មាននៅឡើយ?

mkdir projects/website/src
mkdir: projects/website: No such file or directory

(ពាក្យពេចន៍ពិតប្រាកដនៃ error message ខុសគ្នាបន្តិចបន្តួចរវាង macOS និង Linux ប៉ុន្តែអត្ថន័យគឺដូចគ្នា។)

mkdir បដិសេធមិនបង្កើត folder ដែលបាត់នៅចន្លោះនោះទេ។ Option -p (parents) ប្រាប់វាឲ្យបង្កើតគ្រប់ folder ដែលបាត់តាមផ្លូវ៖

mkdir -p projects/website/src

-p ក៏មិនត្អូញត្អែរដែរ បើ folder នោះមានរួចហើយ ដែលធ្វើឲ្យវាមានសុវត្ថិភាពក្នុងការប្រើនៅក្នុង script។

មានល្បិចមួយទៀតដែលគួរដឹង។ Brace expansion អនុញ្ញាតឲ្យអ្នកសរសេរឈ្មោះច្រើនក្នុងពេលតែមួយ — shell ពង្រីកសញ្ញាដង្កៀប (brace) មុនពេលរត់ command៖

mkdir -p projects/website/{src,tests,docs}

នោះគឺដូចគ្នានឹងការវាយ path បីដាច់ដោយឡែកពីគ្នា៖ projects/website/src, projects/website/tests និង projects/website/docs។ សូមកត់សម្គាល់ថា គ្មានដកឃ្លា នៅខាងក្នុងសញ្ញាដង្កៀបទេ។

2. បង្កើត File៖ touch

touch បង្កើត file ទទេ៖

touch notes/todo.txt
touch notes/ideas.txt notes/shopping.txt

ពិនិត្យថាពួកវាមាននៅទីនោះ ហើយពិតជាទទេមែន (ទំហំ 0)៖

ls -l notes
-rw-r--r--  1 dara  staff  0 Oct  1 10:02 ideas.txt
-rw-r--r--  1 dara  staff  0 Oct  1 10:02 shopping.txt
-rw-r--r--  1 dara  staff  0 Oct  1 10:02 todo.txt

បើ file នោះមានរួចហើយ touch មិនផ្លាស់ប្តូរមាតិការបស់វាទេ — វាគ្រាន់តែធ្វើបច្ចុប្បន្នភាពពេលវេលា «កែប្រែចុងក្រោយ» ប៉ុណ្ណោះ។ នោះហើយជាប្រភពនៃឈ្មោះរបស់វា៖ វា «ប៉ះ (touch)» file នោះ។

File ទទេមិនសូវគួរឲ្យចាប់អារម្មណ៍ទេ ដូច្នេះនេះជាវិធីរហ័សមួយដើម្បីដាក់អត្ថបទមួយបន្ទាត់ចូលទៅក្នុង file។ កុំបារម្ភអំពី > នៅឡើយ — ជំពូកទី 6 ពន្យល់វាយ៉ាងពេញលេញ៖

echo "Buy rice" > notes/shopping.txt
echo "Learn the command line" > notes/todo.txt

ដើម្បីបើក file នៅក្នុង editor បែបក្រាហ្វិកវិញ code notes/todo.txt បើកវានៅក្នុង VS Code (បើអ្នកបានដំឡើងវា) ហើយ open / xdg-open / explorer.exe ពីជំពូកមុន ក៏ដំណើរការជាមួយ file ផងដែរ។

3. ការចម្លង៖ cp

cp (copy) ទទួលយក ប្រភព (source) មួយ និង គោលដៅ (destination) មួយ៖

cp notes/todo.txt notes/todo-backup.txt

វាចម្លង todo.txt ទៅជា file ថ្មីមួយឈ្មោះ todo-backup.txt នៅក្នុង folder ដដែល។ បើគោលដៅជា folder ច្បាប់ចម្លងនឹងចូលទៅខាងក្នុងវា ហើយរក្សាឈ្មោះដដែល៖

cp notes/todo.txt drafts/

ឥឡូវនេះមាន drafts/todo.txt ហើយ។ សញ្ញា / នៅខាងចុង drafts/ គឺមិនចាំបាច់ទេ ប៉ុន្តែវាជាទម្លាប់ល្អ៖ វាធ្វើឲ្យច្បាស់ថាអ្នកចង់សំដៅលើ folder មួយ។

អ្នកអាចចម្លង file ច្រើនចូលទៅក្នុង folder មួយក្នុងពេលតែមួយបាន — folder តែងតែនៅ ចុងក្រោយ៖

cp notes/ideas.txt notes/shopping.txt drafts/

ការចម្លង Folder

សាកល្បងចម្លង folder ទាំងមូល៖

cp notes notes-copy
cp: notes is a directory (not copied).

ការចម្លង folder មានន័យថាការចម្លងអ្វីៗទាំងអស់នៅខាងក្នុងវា និងអ្វីៗទាំងអស់នៅខាងក្នុង folder ទាំងនោះ ហើយបន្តបែបនេះតទៅទៀត។ អ្នកត្រូវតែស្នើសុំវាឲ្យបានច្បាស់លាស់ដោយប្រើ -r (recursive)៖

cp -r notes notes-copy

ការព្រមាន៖ បើ file គោលដៅមានរួចហើយ cp សរសេរជាន់ពីលើវាដោយមិនសួរ។ បន្ថែម -i (interactive) ដើម្បីឲ្យវាសួរជាមុនសិន៖ cp -i notes/todo.txt drafts/។

4. ការផ្លាស់ទី និងការប្តូរឈ្មោះ៖ mv

mv (move) ដំណើរការដូច cp ដែរ លើកលែងតែ file ដើមបាត់ទៅវិញបន្ទាប់ពីនោះ។ ផ្លាស់ទី file មួយចូលទៅក្នុង folder៖

mv notes-copy/todo.txt projects/

គួរឲ្យចាប់អារម្មណ៍ គឺគ្មាន command «rename» ដាច់ដោយឡែកទេ។ ការប្តូរឈ្មោះ គ្រាន់តែជាការផ្លាស់ទី file ទៅឈ្មោះថ្មីមួយនៅក្នុង folder ដដែលប៉ុណ្ណោះ៖

mv drafts/todo.txt drafts/old-todo.txt

ហើយខុសពី cp, mv ដំណើរការជាមួយ folder ដោយមិនចាំបាច់មាន -r ព្រោះ file នៅខាងក្នុងមិនចាំបាច់ត្រូវចម្លងទេ — folder គ្រាន់តែទទួលបានឈ្មោះ ឬទីតាំងថ្មីប៉ុណ្ណោះ៖

mv notes-copy archive

ការព្រមាន៖ ដូច cp ដែរ mv សរសេរជាន់ពីលើ file ដែលមានឈ្មោះដូចគ្នានៅគោលដៅដោយស្ងាត់ៗ។ mv -i សួរជាមុនសិន។

5. ការលុប៖ rm និង rmdir

នេះគឺជាផ្នែកមួយនៃ command line ដែលសមនឹងទទួលបានការគោរពយ៉ាងពិតប្រាកដ។

rm (remove) លុប file៖

rm notes/todo-backup.txt

គ្មានសំណួរ គ្មានការបញ្ជាក់ ហើយ — ចំណុចសំខាន់ — គ្មានធុងសំរាមទេ។ File ដែលត្រូវបានលុបដោយ rm មិនទៅកាន់ Trash ឬ Recycle Bin ទេ។ គ្មាន «undo» និងគ្មាន «restore» ឡើយ។ ដូចដែលអ្នកបានឃើញនៅក្នុង File និង File System ទិន្នន័យអាចនៅលើ disk មួយរយៈទៀតតាមលក្ខណៈបច្ចេកទេស ប៉ុន្តែតាមការអនុវត្តជាក់ស្តែង វាបាត់ហើយ។

rmdir លុប folder មួយ ប៉ុន្តែ លុះត្រាតែវាទទេ — ដែលធ្វើឲ្យវាជាជម្រើសដែលមានសុវត្ថិភាព៖

mkdir empty-folder
rmdir empty-folder

ដើម្បីលុប folder មួយ និងអ្វីៗទាំងអស់នៅខាងក្នុងវា សូមប្រើ rm -r៖

rm -r archive

អ្នកនឹងឃើញ rm -rf ញឹកញាប់នៅក្នុងមេរៀនផ្សេងៗ។ -f (force) មានន័យថា «កុំសួរ កុំត្អូញត្អែរ ទោះបី file ត្រូវបានការពារពីការសរសេរ ឬមិនមានក៏ដោយ»។ វាមានប្រយោជន៍នៅក្នុង script ហើយវាមានគ្រោះថ្នាក់នៅក្នុងដៃរបស់អ្នក រហូតដល់អ្នកមានទំនុកចិត្ត — path ខុសតែមួយ ហើយ folder ការងារទាំងមូលនឹងបាត់ក្នុងរយៈពេលមួយប្រភាគវិនាទី។

ទម្លាប់ដែលរក្សាអ្នកឲ្យមានសុវត្ថិភាព៖

  • រត់ pwd មុនពេលលុប ដើម្បីឲ្យអ្នកដឹងថាអ្នកនៅឯណា។
  • រត់ ls ជាមួយ path ដដែលពិតប្រាកដជាមុនសិន។ បើ ls drafts/*.txt បង្ហាញ file ដែលអ្នករំពឹងទុក នោះ rm drafts/*.txt នឹងលុប file ទាំងនោះ ហើយគ្មានអ្វីផ្សេងទៀតទេ។
  • ប្រើ rm -i នៅពេលអ្នកមិនប្រាកដ។ វាសួរ remove drafts/old-todo.txt? សម្រាប់ file នីមួយៗ៖ វាយ y ដើម្បីបញ្ជាក់។
  • ប្រើ Tab ដើម្បីបំពេញ path ជំនួសឲ្យការវាយវា ដើម្បីកុំឲ្យការវាយខុសអាចធ្វើឲ្យ rm ចង្អុលទៅកន្លែងផ្សេង។
  • កុំរត់ command rm -rf ដែលចម្លងពីអ៊ីនធឺណិតឲ្យសោះ ដោយមិនយល់ច្បាស់ថាវាលុប path មួយណា។

6. Wildcard៖ ធ្វើការជាមួយ File ច្រើនក្នុងពេលតែមួយ

ការវាយឈ្មោះ file គ្រប់ឈ្មោះ ឆាប់ធ្វើឲ្យធុញទ្រាន់ណាស់។ Wildcard (ហៅផងដែរថា glob pattern) អនុញ្ញាតឲ្យអ្នករៀបរាប់ពីក្រុមឈ្មោះមួយ៖

Patternត្រូវនឹង
*តួអក្សរណាក៏បាន ចំនួនប៉ុន្មានក៏បាន (រួមទាំងគ្មានសោះ)
?តួអក្សរមួយពិតប្រាកដ
[abc]តួអក្សរមួយ៖ a, b ឬ c

តោះបង្កើត file មួយចំនួនដើម្បីសាកល្បងពួកវា៖

touch photos/beach.jpg photos/temple.jpg photos/family.png photos/scan1.pdf photos/scan2.pdf

ឥឡូវនេះ៖

ls photos/*.jpg        # beach.jpg  temple.jpg
ls photos/scan?.pdf    # scan1.pdf  scan2.pdf
ls photos/*            # everything in photos
cp photos/*.jpg drafts/

នេះជាចំណុចសំខាន់ដែលត្រូវយល់៖ shell ជាអ្នកពង្រីក wildcard មិនមែន command ទេ។ មុនពេល ls ចាប់ផ្តើមផង shell មើលទៅក្នុង folder រកឈ្មោះដែលត្រូវគ្នា ហើយជំនួស photos/*.jpg ដោយ photos/beach.jpg photos/temple.jpg។ ls គ្រាន់តែទទួលបាន argument ធម្មតាពីរប៉ុណ្ណោះ។ នោះហើយជាមូលហេតុដែល wildcard ដំណើរការដូចគ្នាជាមួយគ្រប់ command — ls, cp, mv, rm — ពួកវាមិនដែលឃើញ * ផងទេ។

អ្នកអាចសាកល្បងមើលថា pattern មួយនឹងត្រូវនឹងអ្វីខ្លះ ដោយសុវត្ថិភាព ដោយប្រើ echo៖

echo photos/*.pdf
photos/scan1.pdf photos/scan2.pdf

បើគ្មានអ្វីត្រូវគ្នាទេ zsh នឹងឈប់ជាមួយ error (no matches found) ចំណែក Bash បញ្ជូន pattern នោះទៅមុខដដែលដោយមិនផ្លាស់ប្តូរ ដូច្នេះ command ត្អូញត្អែរថាវារកមិនឃើញ file ដែលមានឈ្មោះ *.gif តាមព្យញ្ជនៈ។ ទោះយ៉ាងណាក៏ដោយ គ្មានអ្វីកើតឡើងទេ។

រឿងពីរទៀតដែលត្រូវដឹង៖

  • * មិនត្រូវនឹង hidden file ទេ (ឈ្មោះដែលចាប់ផ្តើមដោយ .) ដូច្នេះ rm * នឹងមិនលុប .env ឬ .git ទេ។ នោះជាមុខងារសុវត្ថិភាពដែលបានរចនាឡើងដោយចេតនា។
  • rm * លុប គ្រប់ file ដែលមើលឃើញនៅក្នុង folder បច្ចុប្បន្ន។ នេះពិតជាកន្លែងដែលទម្លាប់ «រត់ ls ជាមុនសិន» បង្ហាញពីតម្លៃរបស់វា។

7. ឈ្មោះដែលមានដកឃ្លា និងតួអក្សរចម្លែក

ដូចដែលអ្នកបានឃើញក្នុងជំពូកទី 2 shell បំបែក argument តាមដកឃ្លា។ ដូច្នេះ command នេះបង្កើត file ពីរ គឺ My និង Notes.txt៖

touch My Notes.txt

មានវិធីពីរយ៉ាងដើម្បីរក្សាឈ្មោះដែលមានដកឃ្លាឲ្យនៅជាមួយគ្នា។

សញ្ញាសម្រង់ (quote) ព័ទ្ធជុំវិញឈ្មោះទាំងមូល៖

touch "My Notes.txt"
cp "My Notes.txt" drafts/

Backslash នៅពីមុខដកឃ្លានីមួយៗ ដែលប្រាប់ shell ថា «ដកឃ្លានេះជាផ្នែកមួយនៃឈ្មោះ»៖

ls My\ Notes.txt

អ្នកមិនចាំបាច់ចងចាំថាត្រូវប្រើមួយណាទេ — ចុច Tab ហើយ shell នឹងបន្ថែម backslash ឲ្យអ្នក។

ដូចគ្នានេះដែរសម្រាប់តួអក្សរផ្សេងទៀតដែល shell ចាត់ទុកជាពិសេស ដូចជា *, ?, &, $, !, (, ) និង '។ បើឈ្មោះ file មានតួអក្សរណាមួយក្នុងចំណោមនេះ សូមដាក់វាក្នុងសញ្ញាសម្រង់។ សញ្ញាសម្រង់តែមួយ ('...') តឹងរ៉ឹងបំផុត៖ shell ទុកអ្វីៗទាំងអស់នៅខាងក្នុងវាឲ្យនៅដដែលដូចដែលបានសរសេរ។

ដំណោះស្រាយសាមញ្ញបំផុត គឺជៀសវាងបញ្ហានេះនៅក្នុង file ផ្ទាល់ខ្លួនរបស់អ្នក។ អ្នកអភិវឌ្ឍន៍ជាធម្មតាដាក់ឈ្មោះ file និង folder ជា អក្សរតូចជាមួយសញ្ញា hyphen៖ my-notes.txt, project-plan.md, family-photos។ គ្មានដកឃ្លា គ្មានអក្សរធំ គ្មានតួអក្សរពិសេស ហើយគ្មានអ្វីត្រូវដាក់ក្នុងសញ្ញាសម្រង់ — ហើយវាជាអ្វីដែលអ្នកនឹងឃើញនៅក្នុងស្ទើរតែគ្រប់ project កូដ។

8. សាកល្បងដោយខ្លួនឯង

ធ្វើអ្វីៗទាំងអស់នេះនៅក្នុង ~/cli-practice។

  1. នៅក្នុង command តែមួយ បង្កើត folder music/khmer, music/pop និង music/classical ដោយប្រើ mkdir -p និង brace expansion។
  2. បង្កើត file ទទេបីនៅក្នុង music/pop៖ song1.mp3, song2.mp3 និង cover.jpg។
  3. ចម្លងតែ file .mp3 ចូលទៅក្នុង music/khmer។ ប្រើ echo ដើម្បីពិនិត្យ pattern ជាមុនសិន។
  4. ប្តូរឈ្មោះ music/pop/cover.jpg ទៅជា music/pop/album-cover.jpg។
  5. ផ្លាស់ទី folder music/classical ទាំងមូលចូលទៅក្នុង drafts បន្ទាប់មកពិនិត្យដោយប្រើ ls drafts។
  6. បង្កើត file មួយឈ្មោះ "Final Report.txt" (មានដកឃ្លា) បន្ទាប់មកប្តូរឈ្មោះវាទៅជា final-report.txt។
  7. លុបអ្វីៗទាំងអស់នៅខាងក្នុង music/khmer ដោយប្រើ wildcard — ប៉ុន្តែរត់ ls ជាមួយ pattern ដដែលជាមុនសិន។ បន្ទាប់មកលុប folder ទទេនោះដោយប្រើ rmdir។

ឥឡូវនេះ អ្នកអាចរៀបចំ file ទាំងស្រុងពី keyboard។ បន្ទាប់ តោះមើលទៅខាងក្នុង file ទាំងនោះ៖ ការអាន ការរំកិល និងការកែប្រែវានៅក្នុង terminal។

ទិញកាហ្វេជូនខ្ញុំ

ចូលចិត្តមេរៀននេះមែនទេ? សូមពិចារណាទិញកាហ្វេជូនខ្ញុំមួយកែវ ដើម្បីគាំទ្រការបង្កើតមាតិកាឥតគិតថ្លៃបន្ថែមទៀត!