ਉਦਾਹਰਨ "xargs" ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ

ਵੇਰਵਾ ਅਤੇ ਜਾਣ-ਪਛਾਣ

Xargs ਕਮਾਂਡ ਆਮ ਤੌਰ ਤੇ ਇੱਕ ਕਮਾਂਡ ਲਾਈਨ ਵਿੱਚ ਵਰਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਇੱਕ ਕਮਾਂਡ ਦੀ ਆਉਟਪੁਟ ਦੂਜੇ ਕਮਾਂਡ ਲਈ ਇੰਪੁੱਟ ਆਰਗੂਮੈਂਟ ਵਜੋਂ ਪਾਸ ਕੀਤੀ ਜਾਂਦੀ ਹੈ.

ਬਹੁਤ ਸਾਰੇ ਮਾਮਲਿਆਂ ਵਿੱਚ, ਕੋਈ ਖਾਸ ਹੁਕਮ ਜਿਵੇਂ ਕਿ xargs ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਲੋੜੀਂਦਾ ਹੈ, ਕਿਉਂਕਿ "ਪਾਈਪ" ਅਤੇ "ਰੀਡਾਇਰੈਕਸ਼ਨ" ਓਪਰੇਟਰ ਇੱਕੋ ਕਿਸਮ ਦੇ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਕਰਦੇ ਹਨ. ਹਾਲਾਂਕਿ, ਕਈ ਵਾਰੀ ਬੁਨਿਆਦੀ ਪਾਈਪਿੰਗ ਅਤੇ ਰੀਡਾਇਰੈਕਸ਼ਨ ਵਿਧੀ ਨਾਲ ਮੁੱਦੇ ਹੁੰਦੇ ਹਨ, ਜਿਵੇਂ ਕਿ, ਜੇ ਆਰਗੂਮੈਂਟਾਂ ਵਿਚ ਸਪੇਸ ਹੁੰਦੇ ਹਨ, ਤਾਂ ਇਹ ਐਕਸਗਸ ਦਾ ਨਤੀਜਾ ਨਿਕਲਦਾ ਹੈ.

ਇਸ ਤੋਂ ਇਲਾਵਾ, ਜ਼ਰਰਸ ਨਿਸ਼ਚਿਤ ਹੁਕਮ ਨੂੰ ਵਾਰ ਵਾਰ ਚਲਾਉਂਦਾ ਹੈ, ਜੇ ਲੋੜ ਹੋਵੇ, ਤਾਂ ਉਸ ਨੂੰ ਦਿੱਤੇ ਗਏ ਸਾਰੇ ਆਰਗੂਮੈਂਟ ਤੇ ਕਾਰਵਾਈ ਕਰੋ. ਵਾਸਤਵ ਵਿੱਚ, ਤੁਸੀਂ ਇਹ ਨਿਸ਼ਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਹਰ ਵਾਰ ਜਦੋਂ xargs ਦਿੱਤੇ ਗਏ ਹੁਕਮ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ ਤਾਂ ਸਟੈਂਡਰਡ ਇਨਪੁਟ ਸਟ੍ਰੀਮ ਤੋਂ ਕਿੰਨੀ ਆਰਗੂਮਿੰਟ ਨੂੰ ਪੜ੍ਹਨਾ ਚਾਹੀਦਾ ਹੈ.

ਆਮ ਤੌਰ ਤੇ, xargs ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾਣੀ ਚਾਹੀਦੀ ਹੈ ਜੇ ਇੱਕ ਕਮਾਂਡ ਦੀ ਆਉਟਪੁਟ ਕਿਸੇ ਦੂਜੇ ਕਮਾਂਡ ਦੇ ਵਿਕਲਪ ਜਾਂ ਆਰਗੂਮੈਂਟਾਂ ਦੇ ਹਿੱਸੇ ਵਜੋਂ ਇਸਤੇਮਾਲ ਕੀਤੀ ਜਾਣੀ ਹੈ ਜਿਸਤੇ ਡੇਟਾ ਸਟ੍ਰੀਮ ਕੀਤਾ ਗਿਆ ਹੈ (ਪਾਈਪ ਆਪਰੇਟਰ "|" ਵਰਤਦੇ ਹੋਏ) ਰੈਗੂਲਰ ਪਾਈਪਿੰਗ ਕਾਫੀ ਹੈ ਜੇ ਡਾਟਾ ਦੂਜੀ ਕਮਾਂਡ ਦੇ (ਸਟੈਂਡਰਡ) ਇਨਪੁਟ ਦਾ ਇਰਾਦਾ ਹੈ.

ਉਦਾਹਰਨ ਲਈ, ਜੇ ਤੁਸੀਂ ls ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ ਫਾਇਲ ਨਾਂ ਅਤੇ ਡਾਇਰੈਕਟਰੀਆਂ ਦੀ ਸੂਚੀ ਤਿਆਰ ਕਰਨ ਲਈ ਕਰਦੇ ਹੋ, ਅਤੇ ਫਿਰ ਇਸ ਲਿਸਟ ਨੂੰ xargs ਕਮਾਂਡ ਨੂੰ echo ਕਮਾਂਡ ਵਿੱਚ ਪਾਈਪ ਕਰੋ ਤਾਂ ਤੁਸੀਂ ਦੱਸ ਸਕਦੇ ਹੋ ਕਿ ਕਿੰਨੇ ਫਾਇਲ ਨਾਂ ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਨਾਂ ਹਰੇਕ ਇੰਨਕਰਸਟੇਸ਼ਨ ਤੇ ਈਕੋ ਦੁਆਰਾ ਕਾਰਵਾਈ ਕਰਦੇ ਹਨ :

ls | xargs -n 5 ਈਕੋ

ਇਸ ਸਥਿਤੀ ਵਿੱਚ, ਐਕੋ ਨੂੰ ਇੱਕ ਸਮੇਂ ਵਿੱਚ ਪੰਜ ਫਾਈਲਾਂ ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਨਾਂ ਪ੍ਰਾਪਤ ਹੁੰਦੀਆਂ ਹਨ. ਕਿਉਂਕਿ ਐਕੋ ਅਖੀਰ ਵਿਚ ਇਕ ਨਵਾਂ ਲਾਈਨ ਅੱਖਰ ਜੋੜਦੀ ਹੈ, ਇਸ ਲਈ ਪੰਜ ਲਾਈਨਾਂ ਹਰ ਲਾਈਨ ਤੇ ਲਿਖੀਆਂ ਜਾਂਦੀਆਂ ਹਨ.

ਜੇ ਤੁਸੀਂ ਇੱਕ ਕਮਾਂਡ ਚਲਾਉਂਦੇ ਹੋ ਜੋ ਵੱਡੀ ਅਤੇ ਅਣ-ਲੋੜੀਦੀਆਂ ਨੰਬਰ ਆਈਟਮਾਂ (ਜਿਵੇਂ ਕਿ ਫਾਇਲ ਨਾਂ) ਦਿੰਦਾ ਹੈ, ਜੋ ਅੱਗੇ ਪ੍ਰਕਿਰਿਆ ਲਈ ਕਿਸੇ ਹੋਰ ਕਮਾਂਡ ਲਈ ਪਾਸ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ ਵੱਧ ਤੋਂ ਵੱਧ ਆਰਗੂਮਿੰਟ ਨੂੰ ਕੰਟਰੋਲ ਕਰਨ ਦਾ ਵਧੀਆ ਸੁਝਾਅ ਹੈ ਜੋ ਓਵਰਲੋਡ ਅਤੇ ਕਰੈਸ਼ਿੰਗ ਤੋਂ ਬਚਣ ਲਈ ਦੂਸਰੀ ਕਮਾਂਡ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ.

ਹੇਠਲੀ ਕਮਾਂਡ ਲਾਈਨ ਭਾਗ cp ਕਮਾਂਡ ਤੇ ਦਿੱਤੇ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ 200 ਦੇ ਸਮੂਹਾਂ ਨੂੰ ਖੋਜਣ ਦੁਆਰਾ ਤਿਆਰ ਕੀਤੇ ਫਾਇਲ ਨਾਂ ਦੀ ਸਟਰੀਮ, ਜੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਬੈਕਅੱਪ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਨਕਲ ਕਰਦਾ ਹੈ.

ਲੱਭੋ ./-ਕਿਸਮ f -name "* .txt" -print | | xargs -l200 -i cp -f {} ./backup

ਖੋਜ ਕਮਾਂਡ ਵਿਚ "./" ਇਕਾਈ ਮੌਜੂਦਾ ਡਾਇਰੈਕਟਰੀ ਨੂੰ ਖੋਜਣ ਲਈ ਨਿਰਧਾਰਤ ਕਰਦੀ ਹੈ. "-ਟਾਈਪ f" ਆਰਗੂਮੈਂਟ ਖੋਜਾਂ ਨੂੰ ਫਾਈਲਾਂ ਤੇ ਅਤੇ "-name" * .txt "ਫਲੈਗ ਹੋਰ ਫਿਲਟਰਾਂ ਨੂੰ" .txt "ਐਕਸਟੈਂਸ਼ਨ ਦੇ ਕਿਸੇ ਵੀ ਚੀਜ਼ ਤੋਂ ਬਾਹਰ ਕਰਨ 'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦਾ ਹੈ .- x ਕਲਾਕ ਵਿਚ -i ਫਲੈਗ ਸਿਗਨਲ ਹੈ ਕਿ { } ਸੰਦਰਭ ਭਾਫ ਦਾ ਹਰੇਕ ਫਾਈਲ ਨਾਮ ਪ੍ਰਸਤੁਤ ਕਰਦਾ ਹੈ

ਹੇਠਲੀ ਕਮਾਂਡ ਡਾਇਰੈਕਟਰੀ / tmp ਵਿੱਚ ਜਾਂ ਹੇਠਲੇ ਕੋਰ ਦੇ ਨਾਂ ਲੱਭਦੀ ਹੈ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਹਟਾ ਦਿੰਦੀ ਹੈ.

find / tmp -name core -type f-print | 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>

ਬਦਲਣ ਵਾਲੀ ਸਤਰ "{}" ਵਜੋਂ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤੀ ਗਈ ਹੈ. ਇਸਦਾ ਅਰਥ ਹੈ, ਕਮਾਂਡ ਆਰਗੂਮੈਂਟ ਵਿੱਚ "{}" ਦੀਆਂ ਕਿਸੇ ਵੀ ਮੌਜੂਦਗੀ ਨੂੰ ਪਾਈਪ ਓਪਰੇਸ਼ਨ ਰਾਹੀਂ ਆਰਗੂਜੇਟ ਨੂੰ ਅੱਗੇ ਭੇਜਣ ਵਾਲੇ ਇਨਪੁਟ ਐਲੀਮੈਂਟ ਦੁਆਰਾ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਹੈ. ਇਹ ਤੁਹਾਨੂੰ ਚਲਾਉਣ ਲਈ (ਵਾਰ-ਵਾਰ) ਕਮਾਂਡ ਦੀ ਆਰਗੂਮੈਂਟ ਵਿੱਚ ਖਾਸ ਅਹੁਦਿਆਂ ਤੇ ਇਨਪੁਟ ਐਲੀਮੈਂਟ ਲਗਾਉਣ ਲਈ ਸਹਾਇਕ ਹੈ.