TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #174 5.83K
1000 & 1 способ: решение

И так, было интересно посмотреть на ваши варианты, один из них даже пробил то, о чем пойдет речь.

Возможно, способ не самый минималистичный, но мне понравился используемый стек)

Сразу не пугайтесь, все разберем:


$ seq 1 10 | xargs -I{} bash -c "echo \"file{}.txt\" > file{}.txt"


1) seq 1 10 - генерирует последовательность чисел 1-10. Каждое число будет выведено в новой строке:


$ seq 1 10
1
2
3
...


2) конвейер '|' - используется для того, чтобы команда xargs получила на вход (STDIN) вывод (STDOUT) предыдущей команды seq.

В результате xargs будет работать с последовательностью 1-10;

3) "xargs -I{}" - утилита xargs позволяет выполнять произвольную команду для одного либо нескольких входных значений. В данном случае входные значения передаются через конвейер.

Мы детально ее разберем отдельно. Пока вам нужно знать только то, что xargs выполнит "bash -c" для каждого элемента от 1 до 10.

"-I{}" позволяет определить место входных данных в сгенерированной команде. По умолчанию они идут в конец. Вместо "{}" может быть что угодно. Это, своего рода, шаблон.

В результате каждый элемент 1-10 будет подставлен в нужное нам место внутри команды:


$ seq 1 10 | xargs -I{} echo "file{}.txt"
file1.txt
file2.txt
file3.txt


4) "bash -c" - ну тут-то вы уже подкованы).

Если коротко, таким образом мы запускаем дочернюю оболочку и выполняем в ней команду.

Без доп. оболочки тут обойтись не получится, т.к. для перенаправления xargs не выполнит подстановку по шаблону.

Вернее, '>' вообще не будет частью xargs и отработает в первую очередь, еще до самой команды:


$ seq 10 | xargs -I{} echoo file{}.txt > file{}.txt
xargs: echoo: No such file or directory

$ ls
file{}.txt


5) "echo \"file{}.txt\" > file{}.txt" - строка, которую bash выполнит для каждого значения от 1 до 10 ({}).

"echo \"file{}.txt\" > file{}.txt" - записывает текст fileX.txt в файл fileX.txt. Сам файл создается при перенаправлении вывода, которое мы разбирали тут.

\"\" - экранирование символов, которое необходимо, чтобы избежать разрыва, т.к. строка команды также находится внутри двойных кавычек.

Обратный слэш сообщает bash, что кавычки - это часть текста, а не завершающий символ;

LinuxCamp
  • 👍 37
  • 🔥 16
  • ❤ 7
  • ❤‍🔥 1
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 →