すべてのPowerShellプラットフォームで動作するコードを記述したいと思います。次のコードは、Windowsでは\
のパス区切り文字を使用し、Linuxではパス区切り文字として/
を出力します。異なるパス区切りはどのように処理されますか?
Get-ChildItem -File -Recurse | ForEach-Object { $_.FullName }
obj
ディレクトリの下にあるファイルは除外します。 obj
ディレクトリの数と深さはわかりません。これを行う1つの方法は、以下のようなものを使用してフィルタリングすることです。ただし、パス区切り記号が異なるため、これはLinuxでは機能しません。
Get-ChildItem -File -Recurse |
Where-Object { -not ($_.FullName -like '*\obj\*' |
ForEach-Object { $_.FullName }
正規表現のパターンを使用しているようですが、もっと明確な方法があるかどうかを知りたいと思います。私はこれを厄介だと思う。それだけでなく、\\
文字はこのコードに不具合の脆弱性が存在するLinuxファイル名の一部として有効です。
Get-ChildItem -Recurse |
Where-Object { -not ($_.FullName -like "*[/\]obj[/\]*") } |
ForEach-Object { $_.FullName }
フォルダの階層の深さを知っていたならば、あなたは – BenH
@BenH -leaf' '分割経路の出力に基づいてフィルタリングでき - 一つの方法だろう。 '-split'と' -in'を使うとうまくいくかもしれませんが、それはとてもシンプルなコードのようです。私は 'obj'ディレクトリの数と深さがわからないことを指定するように質問を更新しました。 – lit
'Where-Object {$ _。FullName.split( '/ \')-notcontains" obj "}'はうまくいくようです。 – BenH