വിപുലീകരണങ്ങളുള്ള ഒന്നോ അതിലധികമോ ഫയലുകൾ ഒഴികെ ഒരു ഡയറക്uടറിയിലെ എല്ലാ ഫയലുകളും ഇല്ലാതാക്കാനുള്ള 3 വഴികൾ


ഒരു ഡയറക്uടറിയിലെ എല്ലാ ഫയലുകളും ഇല്ലാതാക്കുകയോ അല്ലെങ്കിൽ തന്നിരിക്കുന്ന തരത്തിലുള്ള ഫയലുകൾ ഒഴികെയുള്ള എല്ലാ ഫയലുകളും നീക്കം ചെയ്uത് ഒരു ഡയറക്uടറി വൃത്തിയാക്കുകയോ ചെയ്യേണ്ട ഒരു സാഹചര്യത്തിലേക്ക് നിങ്ങൾ ചിലപ്പോൾ എത്തിച്ചേരും (ഒരു പ്രത്യേക വിപുലീകരണത്തിൽ അവസാനിക്കുന്നു).

ഈ ലേഖനത്തിൽ, ചില ഫയൽ എക്സ്റ്റൻഷനുകളോ ടൈപ്പുകളോ ഒഴികെയുള്ള ഒരു ഡയറക്ടറിയിലെ ഫയലുകൾ എങ്ങനെ ഇല്ലാതാക്കാമെന്ന് ഞങ്ങൾ കാണിച്ചുതരാം, rm, find and globignore കമാൻഡുകൾ ഉപയോഗിച്ച്.

കൂടുതൽ മുന്നോട്ട് പോകുന്നതിന് മുമ്പ്, Linux-ലെ ഒരു പ്രധാന ആശയം - ഫയൽനാമ പാറ്റേൺ പൊരുത്തപ്പെടുത്തൽ, ഇത് ഞങ്ങളുടെ പ്രശ്uനം കൈകാര്യം ചെയ്യാൻ ഞങ്ങളെ പ്രാപ്uതമാക്കും.

ലിനക്സിൽ, ഒരു ഷെൽ പാറ്റേൺ എന്നത് ഇനിപ്പറയുന്ന പ്രത്യേക പ്രതീകങ്ങൾ ഉൾക്കൊള്ളുന്ന ഒരു സ്ട്രിംഗ് ആണ്, അവയെ വൈൽഡ്കാർഡുകൾ അല്ലെങ്കിൽ മെറ്റാക്യാരക്റ്ററുകൾ എന്ന് വിളിക്കുന്നു:

  1. * – പൂജ്യമോ അതിലധികമോ പ്രതീകങ്ങളുമായി പൊരുത്തപ്പെടുന്നു
  2. ? – ഏതെങ്കിലും ഒരു പ്രതീകവുമായി പൊരുത്തപ്പെടുന്നു
  3. [seq] – seq ലെ ഏത് പ്രതീകവും പൊരുത്തപ്പെടുന്നു
  4. [!seq] – seq-ൽ ഇല്ലാത്ത ഏത് പ്രതീകവും പൊരുത്തപ്പെടുന്നു

സാധ്യമായ മൂന്ന് രീതികൾ ഞങ്ങൾ ഇവിടെ പര്യവേക്ഷണം ചെയ്യും, അവയിൽ ഇവ ഉൾപ്പെടുന്നു:

വിപുലീകൃത പാറ്റേൺ മാച്ചിംഗ് ഓപ്പറേറ്റർമാർ ഉപയോഗിച്ച് ഫയലുകൾ ഇല്ലാതാക്കുക

വ്യത്യസ്uത വിപുലീകൃത പാറ്റേൺ പൊരുത്തപ്പെടുന്ന ഓപ്പറേറ്റർമാരെ ചുവടെ ലിസ്uറ്റ് ചെയ്uതിരിക്കുന്നു, ഇവിടെ പാറ്റേൺ-ലിസ്റ്റ് എന്നത് | പ്രതീകം ഉപയോഗിച്ച് വേർതിരിക്കുന്ന ഒന്നോ അതിലധികമോ ഫയൽനാമങ്ങൾ അടങ്ങുന്ന ഒരു ലിസ്റ്റാണ്:

  1. *(പാറ്റേൺ-ലിസ്റ്റ്) - നിർദ്ദിഷ്ട പാറ്റേണുകളുടെ പൂജ്യമോ അതിലധികമോ സംഭവങ്ങളുമായി പൊരുത്തപ്പെടുന്നു
  2. ?(പാറ്റേൺ-ലിസ്റ്റ്) – നിർദ്ദിഷ്ട പാറ്റേണുകളുടെ പൂജ്യം അല്ലെങ്കിൽ ഒരു സംഭവവുമായി പൊരുത്തപ്പെടുന്നു
  3. +(പാറ്റേൺ-ലിസ്റ്റ്) - നിർദ്ദിഷ്ട പാറ്റേണുകളുടെ ഒന്നോ അതിലധികമോ സംഭവങ്ങളുമായി പൊരുത്തപ്പെടുന്നു
  4. @(പാറ്റേൺ-ലിസ്റ്റ്) - നിർദ്ദിഷ്ട പാറ്റേണുകളിൽ ഒന്നുമായി പൊരുത്തപ്പെടുന്നു
  5. !(പാറ്റേൺ-ലിസ്റ്റ്) – തന്നിരിക്കുന്ന പാറ്റേണുകളിൽ ഒന്ന് ഒഴികെ മറ്റെന്തും പൊരുത്തപ്പെടുന്നു

അവ ഉപയോഗിക്കുന്നതിന്, ഇനിപ്പറയുന്ന രീതിയിൽ extglob ഷെൽ ഓപ്ഷൻ പ്രവർത്തനക്ഷമമാക്കുക:

# shopt -s extglob

1. ഫയലിന്റെ പേര് ഒഴികെ ഒരു ഡയറക്ടറിയിലെ എല്ലാ ഫയലുകളും ഇല്ലാതാക്കാൻ, താഴെയുള്ള കമാൻഡ് ടൈപ്പ് ചെയ്യുക:

$ rm -v !("filename")

2. filename1, filename2 എന്നിവ ഒഴികെയുള്ള എല്ലാ ഫയലുകളും ഇല്ലാതാക്കാൻ:

$ rm -v !("filename1"|"filename2") 

3. എല്ലാ .zip ഫയലുകൾ ഒഴികെയുള്ള എല്ലാ ഫയലുകളും സംവേദനാത്മകമായി എങ്ങനെ നീക്കംചെയ്യാമെന്ന് ചുവടെയുള്ള ഉദാഹരണം കാണിക്കുന്നു:

$ rm -i !(*.zip)

4. അടുത്തതായി, എന്താണ് ചെയ്യുന്നതെന്ന് പ്രദർശിപ്പിക്കുമ്പോൾ, നിങ്ങൾക്ക് എല്ലാ .zip, .odt ഫയലുകൾ കൂടാതെ ഒരു ഡയറക്ടറിയിലെ എല്ലാ ഫയലുകളും ഇനിപ്പറയുന്ന രീതിയിൽ ഇല്ലാതാക്കാൻ കഴിയും:

$ rm -v !(*.zip|*.odt)

നിങ്ങൾക്ക് ആവശ്യമായ എല്ലാ കമാൻഡുകളും ലഭിച്ചുകഴിഞ്ഞാൽ, extglob ഷെൽ ഓപ്ഷൻ ഓഫ് ചെയ്യുക:

$ shopt -u extglob

Linux find Command ഉപയോഗിച്ച് ഫയലുകൾ ഇല്ലാതാക്കുക

ഈ രീതിക്ക് കീഴിൽ, താഴെയുള്ള ഫോമുകളിലേതുപോലെ ഒരു പൈപ്പ് ലൈൻ ഉപയോഗിച്ച് ഉചിതമായ ഓപ്ഷനുകളോടൊപ്പം അല്ലെങ്കിൽ xargs കമാൻഡുമായി സംയോജിപ്പിച്ച് നമുക്ക് find command ഉപയോഗിക്കാം:

$ find /directory/ -type f -not -name 'PATTERN' -delete
$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {}
$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}

5. നിലവിലെ ഡയറക്uടറിയിലെ .gz ഫയലുകൾ ഒഴികെയുള്ള എല്ലാ ഫയലുകളും ഇനിപ്പറയുന്ന കമാൻഡ് ഇല്ലാതാക്കും:

$ find . -type f -not -name '*.gz'-delete

6. ഒരു പൈപ്പ്ലൈനും xargs ഉം ഉപയോഗിച്ച്, നിങ്ങൾക്ക് ഇനിപ്പറയുന്ന രീതിയിൽ കേസ് പരിഷ്കരിക്കാനാകും:

$ find . -type f -not -name '*gz' -print0 | xargs -0  -I {} rm -v {}

7. നമുക്ക് ഒരു അധിക ഉദാഹരണം നോക്കാം, താഴെയുള്ള കമാൻഡ് .gz, .odt, .jpg ഫയലുകൾ ഒഴികെയുള്ള എല്ലാ ഫയലുകളും മായ്uക്കും. നിലവിലെ ഡയറക്uടറിയിൽ:

$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete

ബാഷ് ഗ്ലോബിഗ്നോർ വേരിയബിൾ ഉപയോഗിച്ച് ഫയലുകൾ ഇല്ലാതാക്കുക

എന്നിരുന്നാലും, ഈ അവസാന സമീപനം ബാഷിൽ മാത്രമേ പ്രവർത്തിക്കൂ. ഇവിടെ, GLOBIGNORE വേരിയബിൾ, പാത്ത് നെയിം വിപുലീകരണത്താൽ അവഗണിക്കപ്പെടേണ്ട കോളൺ-വേർതിരിക്കപ്പെട്ട പാറ്റേൺ-ലിസ്റ്റ് (ഫയൽ നാമങ്ങൾ) സംഭരിക്കുന്നു.

ഈ രീതി ഉപയോഗിക്കുന്നതിന്, നിങ്ങൾ വൃത്തിയാക്കാൻ ആഗ്രഹിക്കുന്ന ഡയറക്ടറിയിലേക്ക് നീങ്ങുക, തുടർന്ന് GLOBIGNORE വേരിയബിൾ ഇനിപ്പറയുന്ന രീതിയിൽ സജ്ജമാക്കുക:

$ cd test
$ GLOBIGNORE=*.odt:*.iso:*.txt

ഈ സാഹചര്യത്തിൽ, നിലവിലെ ഡയറക്uടറിയിൽ നിന്ന് .odt, .iso, .txt ഫയലുകൾ ഒഴികെയുള്ള എല്ലാ ഫയലുകളും നീക്കം ചെയ്യപ്പെടും.

ഡയറക്ടറി വൃത്തിയാക്കാൻ ഇപ്പോൾ കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

$ rm -v *

അതിനുശേഷം, GLOBIGNORE വേരിയബിൾ ഓഫ് ചെയ്യുക:

$ unset GLOBIGNORE

ശ്രദ്ധിക്കുക: മുകളിലെ കമാൻഡുകളിൽ ഉപയോഗിച്ചിരിക്കുന്ന ഫ്ലാഗുകളുടെ അർത്ഥം മനസ്സിലാക്കാൻ, വിവിധ ചിത്രീകരണങ്ങളിൽ ഞങ്ങൾ ഉപയോഗിച്ചിട്ടുള്ള ഓരോ കമാൻഡിന്റെയും മാൻ പേജുകൾ റഫർ ചെയ്യുക.

അത്രയേയുള്ളൂ! ഇതേ ആവശ്യത്തിനായി നിങ്ങൾക്ക് മറ്റേതെങ്കിലും കമാൻഡ് ലൈൻ ടെക്നിക്കുകൾ മനസ്സിലുണ്ടെങ്കിൽ, ചുവടെയുള്ള ഞങ്ങളുടെ ഫീഡ്ബാക്ക് വിഭാഗം വഴി ഞങ്ങളുമായി പങ്കിടാൻ മറക്കരുത്.