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?
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' '"