Для чого використовують -exec xargs та -print0?


20

Я думаю, що це загальні способи передачі результату однієї команди до наступної, як вхідних даних.

Як працюють ці троє? Або які веб-сайти / URL-адреси?

Відповіді:


25

Перші речі:

man find

man xargs

У findкоманда виводить результати в стандартний висновок за замовчуванням, так що -printваріант , як правило , не потрібно, але -print0розділяє імена файлів з 0 (NULL) байт , так що імена , що містять пробіли або символи нового рядка можуть бути правильно інтерпретовані.

-execВаріант , що ви можете використовувати замість xargs - команда знахідки виконує команду для кожного елемента , він знаходить.

xargsКоманда зчитує космос або новий рядок розділених рядків ( як правило , з знаходять команди, але вони могли прийти звідки завгодно) і виконує деякі команди для кожного рядка.
Якщо xargs запускається з опцією -0 , очікується, що рядки, розділені NULL, будуть виведеніfind ... -print0

Перевага xargs полягає в тому, що він може групувати рядки разом, так що він виконує команду лише один або два рази замість n разів.

Отже, при звичайному використанні:

find start_directory -name '*.txt' | xargs ls -l 

find вказав би імена файлів, а xargs видав би команди, такі як:

ls -l file1.txt file2.txt file3.txt ... fileN.txt

що швидше, ніж отримання команди пошуку:

ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt

7

Зауважте, що xargs більше не потрібен для поточних реалізацій пошуку, які, ймовірно, всі підтримують цей синтаксис POSIX:

find directory -name '*.txt' -exec ls -l {} + 

що простіше і трохи швидше, ніж варіант xargs.

find directory -name '*.txt' | xargs ls -l 

xargs використовує набагато менше ресурсів, ніж 'find -exec'
Феліпе Альварес,

7
Це навпаки. Для передачі файлів до xargs буде використано трохи більше ресурсів, ніж -exec. Напевно, ви не помічаєте термінатор "+".
jlliagre

2

принаймні одна з цих ланок мертва. Краще також розмістити відповідний зразок коду.
користувач5359531

@ user5359531: Мертве посилання було замінено. І я не можу відтворити такі об’ємні підручники.
harrymc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.