2010-02-23 30 views
5

Làm cách nào để thực hiện tương đương trong PowerShell? Lưu ý rằng tôi yêu cầu đường dẫn đầy đủ cho mỗi tệp.Cách lặp qua các tệp (đường dẫn đầy đủ) trong PowerShell

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

Tôi đã chơi chung với Get-ChildItem một chút và tôi chắc chắn câu trả lời có ở đâu đó.

+0

Bạn nên di chuyển các khám phá của mình thành câu trả lời để chúng có thể được upvoted – JaredPar

+0

Cảm ơn bạn đã đề xuất, sẽ thực hiện. –

Trả lời

6

Tôi không chắc chắn những gì mtime không ở đây là mã để làm mọi thứ khác

gci -re -in *.txt "some\path\to\search" | 
    ?{ -not $_.PSIsContainer } | 
    %{ mv $_.FullName "$($_.FullName).old" } 
+0

mtime - Dữ liệu tệp được sửa đổi lần cuối n * 24 giờ trước. –

+1

'? {$ _. LastWriteTime -le (Get-Date) .AddDays (-8)}' – ephemient

+0

Không chắc chắn làm thế nào để định dạng một bình luận ở đây vì vậy tôi không thể dán mã và đầu ra. Nhưng tôi nhận được lỗi "Move-Item: Không thể liên kết đối số với tham số 'Path' vì nó là null." khi tôi thử câu trả lời gốc. Tôi đang sử dụng PowerShell 1, có lẽ đó là một vấn đề? –

2

Điều này dường như làm cho tôi gần với những gì tôi cần. Tôi đã có thể kết hợp một số thông tin từ câu trả lời của Jared với this question để tìm ra.

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

Vì lợi ích chia sẻ sự giàu có ở đây là chức năng của tôi để mô phỏng * nix tìm.

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 } 
    } 
+0

Mã bạn đăng là gì? –

Các vấn đề liên quan