ಉದಾಹರಣೆಗೆ "xargs" ಆದೇಶದ ಉಪಯೋಗಗಳು

ವಿವರಣೆ ಮತ್ತು ಪರಿಚಯ

Xargs ಆಜ್ಞೆಯನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಆಜ್ಞಾ ಸಾಲಿನಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ, ಅಲ್ಲಿ ಒಂದು ಕಮಾಂಡ್ನ ಔಟ್ಪುಟ್ ಮತ್ತೊಂದು ಕಮಾಂಡ್ಗೆ ಇನ್ಪುಟ್ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳಾಗಿ ರವಾನಿಸಲ್ಪಡುತ್ತದೆ.

ಅನೇಕ ಸಂದರ್ಭಗಳಲ್ಲಿ, "ಪ್ಯಾಪ್" ಮತ್ತು "ಪುನರ್ನಿರ್ದೇಶನ" ನಿರ್ವಾಹಕರು ಒಂದೇ ವಿಧದ ವಹಿವಾಟನ್ನು ನಿರ್ವಹಿಸುವುದರಿಂದ xargs ನಂತಹ ಯಾವುದೇ ವಿಶೇಷ ಆಜ್ಞೆಯನ್ನು ಅದು ಸಾಧಿಸಲು ಅಗತ್ಯವಿರುವುದಿಲ್ಲ. ಆದಾಗ್ಯೂ, ಕೆಲವೊಮ್ಮೆ ಮೂಲ ಕೊಳವೆ ಮತ್ತು ಪುನರ್ನಿರ್ದೇಶನ ಯಾಂತ್ರಿಕತೆಯೊಂದಿಗಿನ ಸಮಸ್ಯೆಗಳಿವೆ, ಉದಾಹರಣೆಗೆ, ವಾದಗಳು ಅಂತರವನ್ನು ಹೊಂದಿದ್ದರೆ, xargs ಮೀರಿಸುತ್ತದೆ.

ಹೆಚ್ಚುವರಿಯಾಗಿ, xargs ನಿರ್ದಿಷ್ಟವಾದ ಆಜ್ಞೆಯನ್ನು ಪುನರಾವರ್ತಿತವಾಗಿ, ಅಗತ್ಯವಿದ್ದಲ್ಲಿ, ಅದಕ್ಕೆ ನೀಡಿದ ಎಲ್ಲಾ ವಾದಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ. ವಾಸ್ತವವಾಗಿ, xargs ನಿರ್ದಿಷ್ಟ ಆದೇಶವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿದಾಗ ಪ್ರತಿ ಬಾರಿಯೂ ಪ್ರಮಾಣಿತ ಇನ್ಪುಟ್ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಎಷ್ಟು ವಾದಗಳನ್ನು ಓದಬೇಕು ಎಂದು ನೀವು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು.

ಸಾಮಾನ್ಯವಾಗಿ, ಒಂದು ಕಮಾಂಡ್ನ ಔಟ್ಪುಟ್ ಅನ್ನು ಎರಡನೇ ಕಮ್ಯಾಂಡ್ನ ಆಯ್ಕೆಗಳು ಅಥವಾ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳ ಭಾಗವಾಗಿ ಬಳಸಬೇಕಾದರೆ (ಆ ಮೂಲಕ ಡೇಟಾವನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಲಾಗುವುದು (ಪೈಪ್ ಆಯೋಜಕರು "|") ಬಳಸಿ xargs ಆದೇಶವನ್ನು ಬಳಸಬೇಕು. ಎರಡನೇ ಆಜ್ಞೆಯ (ಸ್ಟ್ಯಾಂಡರ್ಡ್) ಇನ್ಪುಟ್ ಎಂದು ಡೇಟಾವನ್ನು ಉದ್ದೇಶಿಸಿದ್ದರೆ ನಿಯಮಿತ ಕೊಳವೆಗಳು ಸಾಕಾಗುತ್ತದೆ.

ಉದಾಹರಣೆಗೆ, ನೀವು ಫೈಲ್ ಹೆಸರುಗಳು ಮತ್ತು ಡೈರೆಕ್ಟರಿಗಳ ಪಟ್ಟಿಯನ್ನು ಸೃಷ್ಟಿಸಲು ls ಆದೇಶವನ್ನು ಬಳಸಿದರೆ, ಮತ್ತು ಈ ಪಟ್ಟಿಯನ್ನು xargs ಆಜ್ಞೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಪ್ರತಿಧ್ವನಿಗೆ ಪೈಪ್ ಮಾಡಿ, ಪ್ರತಿ ಪುನರಾವರ್ತನೆಯ ಮೇಲೆ ಪ್ರತಿಧ್ವನಿಯಿಂದ ಎಷ್ಟು ಫೈಲ್ ಹೆಸರುಗಳು ಅಥವಾ ಡೈರೆಕ್ಟರಿ ಹೆಸರುಗಳು ಸಂಸ್ಕರಿಸಲ್ಪಡುತ್ತವೆ ಎಂದು ನೀವು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು :

ls | xargs -n 5 ಪ್ರತಿಧ್ವನಿ

ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಪ್ರತಿಧ್ವನಿ ಒಂದು ಸಮಯದಲ್ಲಿ ಐದು ಫೈಲ್ ಅಥವಾ ಡೈರೆಕ್ಟರಿ ಹೆಸರುಗಳನ್ನು ಪಡೆಯುತ್ತದೆ. ಪ್ರತಿಧ್ವನಿ ಕೊನೆಯಲ್ಲಿ ಒಂದು ಹೊಸ-ಸಾಲಿನ ಪಾತ್ರವನ್ನು ಸೇರಿಸುವುದರಿಂದ, ಪ್ರತಿ ಸಾಲಿನಲ್ಲೂ ಐದು ಹೆಸರುಗಳನ್ನು ಬರೆಯಲಾಗುತ್ತದೆ.

ಹೆಚ್ಚಿನ ಆಯವ್ಯಯವನ್ನು ಹಿಂದಿರುಗಿಸುವ ಒಂದು ಆಜ್ಞೆಯನ್ನು ನೀವು ಕಾರ್ಯಗತಗೊಳಿಸಿದಲ್ಲಿ (ಉದಾ. ಕಡತದ ಹೆಸರುಗಳು) ಮತ್ತಷ್ಟು ಪ್ರಕ್ರಿಯೆಗೆ ಮತ್ತೊಂದು ಕಮಾಂಡ್ಗೆ ವರ್ಗಾಯಿಸಲ್ಪಡುತ್ತವೆ ಅದು ಓವರ್ಲೋಡ್ ಮತ್ತು ಕ್ರ್ಯಾಶಿಂಗ್ ತಪ್ಪಿಸಲು ಎರಡನೇ ಕಮಾಂಡ್ ಸ್ವೀಕರಿಸುವ ವಾದಗಳ ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯನ್ನು ನಿಯಂತ್ರಿಸುವ ಒಳ್ಳೆಯದು.

ಈ ಕೆಳಗಿನ ಆಜ್ಞಾ ಸಾಲಿನ ವಿಭಜನೆಗಳು ಉತ್ಪಾದಿಸುವ ಕಡತದ ಹೆಸರುಗಳ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಪತ್ತೆ ಮಾಡುತ್ತವೆ, ಇದು 200 ಕ್ಕೂ ಮುಂಚಿತವಾಗಿ ಗುಂಪುಗಳ ಬ್ಯಾಕ್ಅಪ್ ಡೈರೆಕ್ಟರಿಗೆ ನಕಲಿಸುವ ಸಿಪಿ ಕಮ್ಯಾಂಡ್ಗೆ ವರ್ಗಾಯಿಸುತ್ತದೆ.

ಹುಡುಕು. / -type fnname "* .txt" -print | xargs -l200 -i cp -f {} ./ ಬ್ಯಾಕ್ಅಪ್

ಹುಡುಕು ಕಮಾಂಡ್ನಲ್ಲಿ "./" ಎಲಿಮೆಂಟ್ ಹುಡುಕಾಟಕ್ಕಾಗಿ ಪ್ರಸ್ತುತ ಡೈರೆಕ್ಟರಿಯನ್ನು ಸೂಚಿಸುತ್ತದೆ. "-type f" ಆರ್ಗ್ಯುಮೆಂಟ್ ಫೈಲ್ಗಳಿಗೆ ಹುಡುಕಾಟವನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ ಮತ್ತು "-name" * .txt "ಫ್ಲ್ಯಾಗ್" txt "ವಿಸ್ತರಣೆಯನ್ನು ಹೊಂದಿಲ್ಲದ ಯಾವುದನ್ನೂ ಶೋಧಿಸುತ್ತದೆ. Xargs ನಲ್ಲಿ -i ಫ್ಲ್ಯಾಗ್ { } ಸಂಕೇತವು ಪ್ರತಿ ಕಡತದ ಹೆಸರನ್ನು ಉಗಿ ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.

ಕೆಳಗಿನ ಆಜ್ಞೆಯು ಕೋಶದ / ಕೆಳಗಿರುವ ಕೋಶದ ಹೆಸರಿನ ಫೈಲ್ಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುತ್ತದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಅಳಿಸುತ್ತದೆ.

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 {-tmv dir1 / {} dir / {} / code>

ಬದಲಿ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು "{}" ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. ಅಂದರೆ, ಆದೇಶದ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳಲ್ಲಿ "{}" ನ ಯಾವುದೇ ಘಟನೆಗಳು ಪೈಪ್ ಕಾರ್ಯಾಚರಣೆಯ ಮೂಲಕ ವಾದಿಸಲು ಫಾರ್ವರ್ಡ್ ಮಾಡಲಾದ ಇನ್ಪುಟ್ ಅಂಶದಿಂದ ಬದಲಾಯಿಸಲ್ಪಡುತ್ತದೆ. (ಪುನರಾವರ್ತಿತವಾಗಿ) ಕಾರ್ಯಗತಗೊಳ್ಳುವ ಆಜ್ಞೆಯ ವಾದಗಳಲ್ಲಿನ ನಿರ್ದಿಷ್ಟ ಸ್ಥಾನಗಳಲ್ಲಿ ಇನ್ಪುಟ್ ಅಂಶಗಳನ್ನು ಇರಿಸಲು ನಿಮಗೆ ಇದು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.