5

How do I do the equivalent in PowerShell? Note that I require the full path to each file.

# ksh
for f in $(find /app/foo -type f -name "*.txt" -mtime +7); do
   mv ${f} ${f}.old
done

I played around with Get-ChildItem for a bit and I am sure the answer is there someplace.

1
  • You should move your discoveries into answers so they can be upvoted Commented Feb 24, 2010 at 16:14

2 Answers 2

6

I'm not sure what mtime does here is the code to do everything else

gci -re -in *.txt "some\path\to\search" | 
  ?{ -not $_.PSIsContainer } |
  %{ mv $_.FullName "$($_.FullName).old" }
Sign up to request clarification or add additional context in comments.

6 Comments

mtime - File data was last modified n*24 hours ago.
?{ $_.LastWriteTime -le (Get-Date).AddDays(-8) }
No sure how to format a comment here so I can't paste the code and output. But I get the error "Move-Item : Cannot bind argument to parameter 'Path' because it is null." when I try the original answer. I am using PowerShell 1, perhaps that is an issue?
You don't need to explicitly give $_.FullName as the first argument to Move-Item, though. It can figure it out from $_ as well.
You can optimize this even further since Move-Item -destination parameter takes input by pipeline you can do this: ` ... | Move-Item -Dest {$_.FullName + '.old'}`.
|
2

This seems to get me close to what I need. I was able to combine some of the information from Jared's answer with this question to figure it out.

foreach($f in $(gci -re -in hoot.txt "C:\temp")) {
   mv $f.FullName "$($f.FullName).old"
}

In the interest of sharing the wealth here is my function to simulate *nix find.

function unix-find (
   $path,
   $name="*.*",
   $mtime=0) 
   {
   gci -recurse -include "$name" "$path" | 
      where-object { -not $_.PSIsContainer -and ($_.LastWriteTime -le (Get-Date).AddDays(-$mtime)) } |
      foreach { $_.FullName }
   }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.