47 lines
1.7 KiB
Markdown
47 lines
1.7 KiB
Markdown
Xargs tips
|
|
|
|
After 12 years being a Windows admin, I've now used powershell more than other
|
|
languages so I'm pretty fluent in it's syntax. So it makes me happy when I
|
|
stumble upon bash/linux scripting paradigms which have been brought over to
|
|
powershell.
|
|
|
|
---
|
|
|
|
It's great to see the inspiration powershell has gained from
|
|
Unix systems and also great that it makes it easier for me to remember.
|
|
|
|
One paradigm I that I wished bash/\*nix had is the `Foreach-Object` command.
|
|
It makes working on collections of objects a breeze. I often find myself
|
|
scratching my head when trying similar tasks on \*nix. Enter `xargs`
|
|
|
|
Take this simple situation: I have a directory and I want to delete everything
|
|
bar a single .config file.
|
|
|
|
$ ls -a
|
|
. blog.css .entry-23032.md .footer.html main.css
|
|
.. .config .entry-23032.md.swp .header.html .title.html
|
|
|
|
My powershell brain wants to:
|
|
|
|
$ gci | ? Name -ne '.config' | foreach-object { rm $_ }
|
|
|
|
On \*nix, Xargs is a bit like adding pipeline input to rm
|
|
|
|
$ ls -a | grep -v '\.config' | xargs rm
|
|
|
|
`xargs` is going to automatically append the output of the previous command as
|
|
an argument of the rm command. In this case the argument has to be the final
|
|
argument, but that can be changed using the `-I` parameter which specifies a
|
|
substitue variable
|
|
|
|
$ ls -a | grep -v '\.config' | xargs -I '{}' echo "Delete {} ?"
|
|
|
|
Of course the powershell line could be a bit shorter
|
|
|
|
$ gci | ? Name -ne '\.config' | rm
|
|
|
|
If you have any comments or feedback, please [email](mailto:jesse@zigford.org) me
|
|
and let me know if you will allow your feedback to be posted here.
|
|
|
|
Tags: bash-v-powershell, xargs, bash, powershell
|