ഉദാഹരണം "xargs" കമാൻഡ് ഉപയോഗിക്കുന്നത്

വിവരണവും ആമുഖവും

കമാൻഡ് ലൈനിൽ സാധാരണയായി xargs കമാൻഡ് ഉപയോഗിക്കുന്നത് ഒരു കമാൻഡിന്റെ ഔട്ട്പുട്ട് ഇൻപുട്ട് ആർഗ്യുമെന്റുകളായി മറ്റൊരു ആജ്ഞയിലേക്ക് കൈമാറുന്നു.

പല സന്ദർഭങ്ങളിലും, "പൈപ്പ്", "റീഡയറക്ഷൻ" ഓപ്പറേറ്റർമാർ ഒരേ തരത്തിലുള്ള ഇടപാടുകൾ നടത്തുന്നതിനാൽ, xargs പോലുള്ള പ്രത്യേക നിർദ്ദേശങ്ങളൊന്നും ആവശ്യമില്ല. എന്നിരുന്നാലും, ചിലപ്പോൾ അടിസ്ഥാന കുഴൽ, റീഡയറക്ഷൻ മെക്കാനിസം എന്നിവയിൽ പ്രശ്നങ്ങൾ ഉണ്ട്. ഉദാഹരണത്തിന്, ആർഗ്യുമെന്റുകൾ സ്പെയ്സുകളുണ്ടെങ്കിൽ, അത് xargs overcomes.

കൂടാതെ, നൽകിയിരിക്കുന്ന എല്ലാ കമാൻഡുകളും പ്രക്രിയപ്പെടുത്തുന്നതിനായി, ആവശ്യമെങ്കിൽ, ആവർത്തിച്ചുളള കമാൻഡുകൾ xargs നടപ്പിലാക്കുന്നു. സത്യത്തിൽ, നിർദിഷ്ട ആജ്ഞകൾ xargs നിർവ്വഹിക്കുന്ന ഓരോ സമയത്തും എത്ര ഇൻപുട്ട്സുകൾ സ്റ്റാൻഡേർഡ് ഇൻപുട്ട് ഓഫ് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് വ്യക്തമാക്കാൻ കഴിയും.

സാധാരണയായി, ഒരു കമാൻഡിന്റെ ഔട്ട്പുട്ട് ഡേറ്റാ നീക്കം ചെയ്യുന്ന രണ്ടാമത്തെ കമാൻഡിലെ ഓപ്ഷനുകൾ അല്ലെങ്കിൽ ആർഗ്യുമെന്റുകളുടെ ഭാഗമായി ഉപയോഗിയ്ക്കണമോ എന്നു് സാധാരണയായി xargs കമാൻഡ് ഉപയോഗിയ്ക്കണം (പൈപ്പ് ഓപ്പറേറ്റർ "|" ഉപയോഗിച്ച്). രണ്ടാമത്തെ ആജ്ഞയുടെ (സ്റ്റാൻഡേർഡ്) ഇൻപുട്ട് ആയി കണക്കാക്കപ്പെട്ടാൽ, ശരിയായ പൈപ്പിങ് മതിയാകും.

ഉദാഹരണത്തിനു്, നിങ്ങൾ ls കമാൻഡ് ഉപയോഗിച്ചു് ഫയലിന്റെ പേരുകളും ഡയറക്റ്ററികളും തയ്യാറാക്കുകയും, പിന്നെ echo കമാൻഡിൽ xargs കമാൻഡിൽ ഈ ലിസ്റ്റ് പൈപ്പ് ചെയ്യുകയാണെങ്കിൽ, ഓരോ ആവൃത്തിയിലും എത്ര ഫയൽ പേരുകൾ അല്ലെങ്കിൽ ഡയറക്ടറി നാമങ്ങൾ echo പ്രോസസ്സ് ചെയ്യുന്നു എന്ന് താഴെ പറഞ്ഞിരിക്കുന്നു. :

ls | xargs -n 5 echo

ഇങ്ങനെയുളളപ്പോൾ, echo ഒരു സമയം അഞ്ച് ഫയൽ അല്ലെങ്കിൽ ഡയറക്ടറി നാമങ്ങൾ സ്വീകരിക്കുന്നു. എക്കൊ മൂവിയിൽ ഒരു പുതിയ ലൈൻ പ്രതീകം ചേർക്കുന്പോൾ, അഞ്ച് പേരുകൾ ഓരോ വരിയിലും എഴുതപ്പെടുന്നു.

മറ്റൊരു കമാൻഡിന് കൈമാറുന്ന വലിയതോ, പ്രവചിക്കാനാകാത്തതോ ആയ ഇനങ്ങൾ (ഉദാ: ഫയൽ പേരുകൾ) നൽകുന്ന ഒരു കമാൻഡ് നിങ്ങൾ എക്സിക്യൂട്ട് ചെയ്യുന്നുവെങ്കിൽ, കമാൻഡ് പരമാവധി എണ്ണൽ നിയന്ത്രണം ഒഴിവാക്കാനും ക്രാഷിംഗ് ഒഴിവാക്കാനും കഴിയുന്ന രണ്ടാമത്തെ ആർഗ്യുമെന്റുകളെ നിയന്ത്രിക്കുന്നതിനുള്ള ഒരു നല്ല ആശയമാണ്.

താഴെ പറയുന്ന കമാൻഡ് ലൈൻ പാർട്ടീഷനുകൾ ലഭ്യമാക്കുന്ന ഫയൽ പേരുകളുടെ സ്ട്രീം 200 സി ഗ്രൂപ്പിലേക്കു് കടക്കുന്നതിനു് മുമ്പു്, അവയെ അവയെ ബാക്കപ്പ് ഡയറക്ടറിയിലേക്ക് പകരുന്നു.

/ .type f -name "* .txt" -print | xargs -l200 -i cp -f {}. / backup

തെരയുന്നതിനുള്ള കമാൻഡിൽ ഉള്ള "./" ഘടകം തിരയുന്നതിനുള്ള നിലവിലെ ഡയറക്ടറി നൽകുന്നു. "-type f" ആർഗ്യുമെന്റ് സെർവറിലേക്ക് തിരയൽ നിയന്ത്രിച്ചിരിക്കുന്നു, ".txt" വിപുലീകരണമില്ലാത്ത "-title" * .txt "ഫ്ലാഗ് തുടർന്ന് മറ്റെന്തെങ്കിലും ഫിൽട്ടർ ചെയ്യുന്നു, xargs സിഗ്നലുകളിലെ the -i ഫ്ലാഗ്, } ആവർത്തനത്തിന്റെ ഓരോ ഫയലിന്റെ പേരും പ്രതിനിധീകരിക്കുന്നു.

താഴെ പറയുന്ന കമാന്ഡ് / tmp എന്ന ഡയറക്ടറിയിലുള്ളതോ ഫയലിനു് കോര് ചെയ്തതോ ആയ ഫയലുകൾ കണ്ടുപിടിച്ചു് അവ ഇല്ലാതാക്കുന്നു.

find / tmp -name core-type fprint | xargs / bin / rm -f

പുതിയ വരികൾ, ഒറ്റ അല്ലെങ്കിൽ ഇരട്ട ഉദ്ധരണികൾ, അല്ലെങ്കിൽ സ്പെയ്സുകൾ അടങ്ങുന്ന ഏതെങ്കിലും ഫയൽ നാമങ്ങൾ ഉണ്ടെങ്കിൽ ഇത് തെറ്റായി പ്രവർത്തിക്കുമെന്ന് ശ്രദ്ധിക്കുക. സിംഗിൾ അല്ലെങ്കിൽ ഇരട്ട ഉദ്ധരണികൾ, സ്പെയ്സുകൾ അല്ലെങ്കിൽ പുതിയ വരികൾ അടങ്ങുന്ന ഫയൽ അല്ലെങ്കിൽ ഡയറക്ടറിയിലുള്ള പേരുകൾ ശരിയായി കൈകാര്യം ചെയ്യുന്ന രീതിയിലുള്ള ഫയലിൻറെ പേരുകൾ താഴെ വ്യത്യാസങ്ങൾ പ്രോസസ് ചെയ്യുന്നു.

find / tmp -name core-type f -print0 | xargs -0 / bin / rm -f

-i ഐച്ഛികത്തിനുപകരം നിങ്ങൾക്കു് -I ഫ്ലാഗ് ഉപയോഗിയ്ക്കാം, ഇതു് സ്ട്രിങിനു് പകരം ഈ വരിയിൽ ആർഗ്യുമെന്റുകളിൽ കമാൻഡ് ഇൻപുട്ട് വരി നൽകുന്നു:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

മാറ്റിസ്ഥാപിക്കുന്ന സ്ട്രിംഗ് "{}" എന്ന് നിർവ്വചിച്ചിരിക്കുന്നു. ഇതിനർത്ഥം പൈപ്പ് പ്രവർത്തനത്തിലൂടെ ആർഗ്യുമെന്റുകൾ അയയ്ക്കുന്ന ഇൻപുട്ട് ഘടകം ആർഗ്യുമെന്റുകളിലെ "{}" ന്റെ ഏതെങ്കിലും സന്ദർഭത്തിൽ മാറ്റിയെഴുതുന്നു. ആജ്ഞയുടെ ആർഗ്യുമെന്റുകളിൽ നിർദ്ദിഷ്ട സ്ഥാനങ്ങളിൽ ഇൻപുട്ട് ഘടകങ്ങൾ സ്ഥാപിക്കാൻ ഇത് നിങ്ങളെ പ്രാപ്തമാക്കുന്നു (ആവർത്തിച്ച്).