commands detail - f

find

The bash find command has loads of functionality - I could possibly devote many pages to Powershell equivalents of the various options, but at it’s simplest the bash find does this:

  1. find . -name '*BB.txt'
  2. ./Archive/Script_WO7171BB.txt
  3. ./Archive/Script_WO8541BB.txt
  4. ./Archive/Script_WO8645_BB.txt
  5. ./Archive/WO8559B/Script_WO8559_Master_ScriptBB.txt
  6. ./Archive/WO8559B/WO8559_finalBB.txt
  7. ./Archive/WO8559B/WO8559_part1BB.txt
  8. ./Archive/WO8559B/WO8559_part2BB.txt

The simplest Powershell equivalent of the bash find is simply to stick a -recurse on the end of a dir command

  1. PS x:\> dir *BB.txt -recurse
  2. Directory: x:\Archive\WO8559B
  3. Mode LastWriteTime Length Name
  4. ---- ------------- ------ ----
  5. ----- 28/02/2012 17:15 608 Script_WO8559_Master_ScriptBB.txt
  6. ----- 28/02/2012 17:17 44 WO8559_finalBB.txt
  7. ----- 28/02/2012 17:17 14567 WO8559_part1BB.txt
  8. ----- 28/02/2012 17:15 1961 WO8559_part2BB.txt
  9. Directory: x:\Archive
  10. Mode LastWriteTime Length Name
  11. ---- ------------- ------ ----
  12. ----- 15/06/2011 08:56 2972 Script_WO7171BB.txt
  13. ----- 14/02/2012 16:39 3662 Script_WO8541BB.txt
  14. ----- 27/02/2012 15:22 3839 Script_WO8645_BB.txt

If you want Powersehll to give you output that looks more like the Unix find then you can pipe into | select fullname

  1. PS x:\> dir *BB.txt -recurse | select fullname
  2. FullName
  3. --------
  4. x:\Archive\WO8559B\Script_WO8559_Master_ScriptBB.txt
  5. x:\Archive\WO8559B\WO8559_finalBB.txt
  6. x:\Archive\WO8559B\WO8559_part1BB.txt
  7. x:\Archive\WO8559B\WO8559_part2BB.txt
  8. x:\Archive\Script_WO7171BB.txt
  9. x:\Archive\Script_WO8541BB.txt
  10. x:\Archive\Script_WO8645_BB.txt

for

for loop - start, stop, step

The equivalent of this bash:

  1. for (( i = 1 ; i <= 5 ; i++ ))
  2. do
  3. echo "Hello, world $i"
  4. done
  5. Hello, world 1
  6. Hello, world 2
  7. Hello, world 3
  8. Hello, world 4
  9. Hello, world 5

…is

  1. for ($i = 1; $i -le 5; $i++)
  2. {
  3. write-output "Hello, world $i"
  4. }
  5. Hello, world 1
  6. Hello, world 2
  7. Hello, world 3
  8. Hello, world 4
  9. Hello, world 5

for loop - foreach item in a list

For the Bash

  1. for I in Chelsea Arsenal Spuds
  2. do
  3. echo $I
  4. done

the equivalent Powershell is:

  1. foreach ($Team in ("Chelsea", "Arsenal", "Spuds")) {write-output $Team}

for loop - for each word in a string

For the bash:

  1. london="Chelsea Arsenal Spurs"
  2. for team in $london; do echo "$team"; done

…the equivalent Powershell is:

  1. $London = "Chelsea Arsenal Spuds"
  2. foreach ($Team in ($London.split())) {write-output $Team}

for loops - for lines in a file

Bash:

  1. for team in $(egrep -v mill london.txt)
  2. > do
  3. > echo $team
  4. > done

Posh:

  1. select-string -notmatch millwall london.txt | select line | foreach {write-output $_}

or:

  1. foreach ($team in (select-string -notmatch millwall london.txt | select line)) {$team}

for loop - for each file in a folder

Bash:

  1. for LocalFile in *
  2. do
  3. echo $LocalFile
  4. done

Posh:

  1. foreach ($LocalFile in $(gci)) {write-output $LocalFile.Name}