TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #177 6.18K
Xargs и флаги: -L, -t

Прошлый пост в общих чертах рассказал нам об утилите xargs и ее возможностях. Сегодня уделим дополнительное внимание 2 ее флагам, которые вполне могут пригодиться.

1. И так, начнем с "-t". Флаг позволяет нам наглядно увидеть то, как xargs вызывает команду и какие аргументы ей передает.

Его полезно использовать для лучшего понимания принципа работы утилиты.

В следующем примере мы найдем все файлы с расширением .txt, разобьем список аргументов по разделителю "\0" и подсчитаем количество строк для каждого элемента:


$ find ./ -name \*.txt -print0 | xargs -0 -t wc -l


Сразу после выполнения нам выведется строка с общим видом выполняемой команды:


wc -l ./file1.txt ./file2.txt './test document.txt'

3 ./file1.txt
10 ./file2.txt
15 ./test document.txt


Можем убедиться в том, что "wc -l" выполнился 1 раз с вот таким длинным списком аргументов. Далее будем использовать "-t" для просмотра и разбора вызовов.

2. Переходим к "-L". Эта вещь позволяет нам указать, сколько строк будет передано на каждый вызов команды.

Тут уточню, что указывается количество строк, а не аргументов. В 1 строке может быть несколько разделённых параметров:


$ ls | paste - -
file1.sh file2sh
file3.sh file4.sh


Тогда все просто - xargs передаст команда столько аргументов, сколько найдет в каждой строке:


$ ls | paste - - | xargs -t -L1 wc -l

wc -l file1.sh file2.sh
...
wc -l file3.sh file4.sh


Полезный пример, матайте на ус. Используется, когда нужно, например, поменять расширение для нескольких файлов:


$ ls | sed -e "p;s/.txt$/.sh/" | xargs -L2 mv


Давайте разберем по частям:


$ ls | sed -e "p;s/.txt$/.sh/"

file1.txt
file1.sh
file2.txt
file2.sh


Вывод команды ls передается на вход для sed, после чего тот печатает изначальные строки и те, в которых изменено расширение.

В следующей части вывод sed передается команде xargs, которая выполняет mv по 1 разу для каждых 2 строк. Внедрим параметр "-t" для наглядности:


$ ... | xargs -L2 -t mv

mv file1.txt file1.sh
mv file2.txt file2.sh


Хммм, а если у нас есть файлы, имена которых состоят из нескольких слов, разделенных пробелами... Решается по щелчку:


$ ls | sed -e "p;s/.txt$/.sh/" | tr "\n" "\0" | xargs -L2 -t -0 mv


Команда 'tr "\n" "\0"' заменяет символы, а флаг "-0" теперь воспринимает за разделитель только символ "\0".

LinuxCamp
  • 🔥 21
  • 👍 10
  • ✍ 7
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →