web-dev-qa-db-ja.com

Linuxの「uniq -d」コマンドはPowerShellに相当しますか?

同じ名前のファイルを見つけるスクリプトをPowerShellで記述しようとしています。その後、そのファイルのグループの重複する名前の数を知りたいです。私はそのようなファイルを見つけることに成功しました:

foreach ($i in Get-ChildItem *.)
{
    Write-Host (Get-ChildItem $i).BaseName
}

しかし、その後はLinuxのようなコマンドが必要ですcat file | sort | uniq -d。この -dパラメータはPSでの私の目標です。

次のコマンドを試してみましたが、機能しません。

$var = (Write-Host (Get-ChildItem $i).BaseName | Sort-Object -Unique).Count

# Let's say there are files '1.mp4,1.mkv,2.mp4'
# I want variable var's value is 1, because only one group that has same file names

7
Ahmet Mehmet

これはあなたが必要なことをするはずです、

$var = Get-ChildItem | Group-Object -Property BaseName | Where-Object { $_.Count -gt 1} | Select-Object -ExpandProperty Name 
3
jfrmilner

次のコマンドを試してみましたが、機能しません。

$var = (Write-Host (Get-ChildItem $i).BaseName | Sort-Object -Unique).Count

#変数varの値は1にしたいのは、同じファイル名を持つ1つのグループだけだからです。

Jfrmilnerによるもう1つの答えは、BaseNamevarに格納しますnot質問で要求したとおりのカウント。

次のコマンドは、カウント(コマンドBaseNameを共有する個別のファイルセットの数)をvarに保存します。これは、より便利な一般的なコマンドです。

 $var = (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count

例1-共通のベース名(テスト)を共有する1セットのファイル

> Get-ChildItem


    Directory: F:\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       12/02/2020     12:18           1272 test.txt
-a----       16/02/2020     17:51             72 test.cmd
-a----       19/11/2019     21:50             19 output.txt
-a----       08/12/2019     18:47            119 GetBits.cmd
-a----       31/12/2019     14:31       26876158 SystemEvents.xml
-a----       08/01/2020     21:30            845 notepad++ regexp answer template.txt
-a----       12/02/2020     11:00          17755 usb.csv
-a----       01/03/2020     10:05            264 index.jpg
-a----       01/03/2020     10:09            264 New.txt


> (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count
1
>

例2-共通のベース名を共有する2つのファイルセット(テストと新規)

> Get-ChildItem


    Directory: F:\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       12/02/2020     12:18           1272 test.txt
-a----       16/02/2020     17:51             72 test.cmd
-a----       19/11/2019     21:50             19 output.txt
-a----       08/12/2019     18:47            119 GetBits.cmd
-a----       31/12/2019     14:31       26876158 SystemEvents.xml
-a----       08/01/2020     21:30            845 notepad++ regexp answer template.txt
-a----       12/02/2020     11:00          17755 usb.csv
-a----       01/03/2020     10:05            264 index.jpg
-a----       01/03/2020     10:09            264 New.txt
-a----       08/03/2020     15:35              0 1
-a----       08/03/2020     15:52              0 New.xxx


> (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count
2
>
2
DavidPostill