I created a simple alias for xargs
, with the intend to pipe it when needed. It will simply run a command for each line of it. My question to you is, is this useful or are there better ways of doing this? This is just a little bit of brainstorming basically. Maybe I have a knot in my head.
# Pipe each line and execute a command. The "{}" will be replaced by the line.
# Example:
# find . -maxdepth 2 -type f -name 'M*' | foreach grep "USB" {}
alias foreach='xargs -d "\n" -I{}'
For commands that already operate on every line from stdin, this won’t be much useful. But in other cases, it might be. A more simplified usage example (and a useless one) would be:
find . -maxdepth 1 | foreach echo "File" {}
It’s important to use the {}
as a placeholder for the “current line” that is processed. What do you think about the usefulness? Have you any idea how to use it?
How to call
xargs
is typically one of those things I always forget. The foreach alias is a great solution!My current solution was to use
tldr
for all of these tools, but yeah if I find myself having to do a for each line, I’ll definitely steal your alias.Luckily (knocks on wood) I almost exclusively work with yaml and json nowadays so I should just learn
yq
.The only downside is, this is not the most efficient way of doing sometimes. I mean
grep
could get all files at once instead one by one. So its not only a performance hit, also if you want to call a program with all arguments at the same time,foreach
would not work in such a case.For this reason, I’ll add following: base command stolen from https://unix.stackexchange.com/questions/338116/turning-separate-lines-into-a-comma-separated-list-with-quoted-entries#338124
# Convert a newline separated list to single line with quotes. # Example: # ls -1 | mergelines alias mergelines="sed 's/\r//;s/^\|$/\"/g' | paste -sd' '"