파일이 PowerShell의 심볼 링크인지 확인합니다.
디렉터리 트리에 있는 PowerShell 스크립트를 사용하고 있으며, 가끔은 처리하면 안 되는 보조 파일이 하드 링크되어 있습니다.파일 여부를 쉽게 확인할 수 있는 방법이 있습니까?System.IO.FileInfo
아닌가요?)는 하드 링크입니까, 아닌가요?
그렇지 않다면 심볼릭 링크(심플링크)를 사용하는 것이 더 쉬울까요?
사용해 보십시오.
function Test-ReparsePoint([string]$path) {
$file = Get-Item $path -Force -ea SilentlyContinue
return [bool]($file.Attributes -band [IO.FileAttributes]::ReparsePoint)
}
이것은 꽤 최소한의 구현이지만, 효과가 있을 것입니다.하드 링크와 심볼릭 링크는 구분되지 않습니다.기본적으로 둘 다 NTFS 재분석 지점인 IIRC를 활용합니다.
5의 한 링크, 및 합니다.d:\Temp\
:
dir 'd:\Temp' -recurse -force | ?{$_.LinkType} | select FullName,LinkType,Target
출력:
FullName LinkType Target
-------- -------- ------
D:\Temp\MyJunctionDir Junction {D:\exp\junction_target_dir}
D:\Temp\MySymLinkDir SymbolicLink {D:\exp\symlink_target_dir}
D:\Temp\MyHardLinkFile.txt HardLink {D:\temp\MyHardLinkFile2.txt, D:\exp\hlink_target.xml}
D:\Temp\MyHardLinkFile2.txt HardLink {D:\temp\MyHardLinkFile.txt, D:\exp\hlink_target.xml}
D:\Temp\MySymLinkFile.txt SymbolicLink {D:\exp\symlink_target.xml}
D:\Temp\MySymLinkDir\MySymLinkFile2.txt SymbolicLink {D:\temp\normal file.txt}
하드 링크에 대한 여러 대상이 필요한 경우 탭으로 구분된 대상을 나열하는 이 변형을 사용합니다.
dir 'd:\Temp' -recurse -force | ?{$_.LinkType} | select FullName,LinkType,@{ Name = "Targets"; Expression={$_.Target -join "`t"} }
스크립트를 하려면 관리자 할 수 .C:\
.
용의 Where-Object
RearsePoint 파일 특성을 검색합니다.
Get-ChildItem | Where-Object { $_.Attributes -match "ReparsePoint" }
리소스가 하드 링크 또는 심볼 링크인지 확인하려는 사용자:
(Get-Item ".\some_resource").LinkType -eq "HardLink"
(Get-Item ".\some_resource").LinkType -eq "SymbolicLink"
키스 힐의 파워셸 스크립트를 사용하여 심볼릭 링크와 하드 링크를 테스트한 Vista에 대한 내 결과:
c:\markus\other>mklink symlink.doc \temp\2006rsltns.doc
symbolic link created for symlink.doc <<===>> \temp\2006rsltns.doc
c:\markus\other>fsutil hardlink create HARDLINK.doc \temp\2006rsltns.doc
Hardlink created for c:\markus\other\HARDLINK.doc <<===>> c:\temp\2006rsltns.doc
c:\markus\other>dir
Volume in drive C has no label.
Volume Serial Number is C8BC-2EBD
Directory of c:\markus\other
02/12/2010 05:21 PM <DIR> .
02/12/2010 05:21 PM <DIR> ..
01/10/2006 06:12 PM 25,088 HARDLINK.doc
02/12/2010 05:21 PM <SYMLINK> symlink.doc [\temp\2006rsltns.doc]
2 File(s) 25,088 bytes
2 Dir(s) 6,805,803,008 bytes free
c:\markus\other>powershell \script\IsSymLink.ps1 HARDLINK.doc
False
c:\\markus\other>powershell \script\IsSymLink.ps1 symlink.doc
True
심볼릭 링크는 재분석 지점이며, 재분석 지점 File Attribute 비트가 설정되어 있지만 하드 링크는 설정되어 있지 않습니다.
여기 하나의 파일을 확인하는 하나의 라이너가 있습니다.$FilePath
및 합니다.
if((Get-ItemProperty $FilePath).LinkType){"symboliclink"}else{"normal path"}
저만의 2센트를 추가하고 싶습니다. 이것은 제게 완벽하게 잘 작동하는 하나의 라이너 함수입니다.
Function Test-Symlink($Path){
((Get-Item $Path).Attributes.ToString() -match "ReparsePoint")
}
다음 PowerShell 스크립트는 -recurse 스위치가 있는 디렉토리에 있는 모든 파일을 나열합니다.파일 이름, 일반 파일인지 하드 링크된 파일인지 여부 및 크기가 콜론으로 구분되어 나열됩니다.
PowerShell 명령줄에서 실행해야 합니다.스크립트에 설정된 디렉토리에서 실행하는 것은 중요하지 않습니다.
Windows와 함께 제공된 fslink 유틸리티를 사용하고 하드링크 및 목록 스위치를 사용하여 각 파일에 대해 이 유틸리티를 실행하고 출력 라인을 카운트합니다.2개 이상일 경우 하드 링크된 파일입니다.
검색이 ▁the▁the▁changing▁starts▁you다▁the▁directory니▁of▁can있을 변경하여 변경할 수 있습니다.c:\windows\system
사령부에서또한 스크립트는 결과를 파일에 기록하기만 하면,c:\hardlinks.txt
이름을 변경하거나 > 캐릭터의 모든 내용을 삭제하면 화면에 출력됩니다.
Get-ChildItem -path C:\Windows\system -file -recurse -force |
foreach-object {
if ((fsutil hardlink list $_.fullname).count -ge 2) {
$_.PSChildname + ":Hardlinked:" + $_.Length
} else {
$_.PSChildname + ":RegularFile:" + $_.Length
}
} > c:\hardlinks.txt
에 문제가 생겼습니다.대상이 null(OneDrive 파일)이고 SYMLINKD와 SYMLINK를 구별하고 싶어서 이 변형을 고안했습니다(HardLink를 처리하지 않음).제 목표는 다른 곳에서 재현할 수 있도록 그곳에 있는 것을 포착하는 것이었습니다.? = Where-Object 및 % = Forach-Object에 유의하십시오.
### ReparsePoint + Directory + Junction = mklink /j
### ReparsePoint + Directory + SymbolicLink = mklink /d
### ReparsePoint + SymbolicLink = mklink
"cd $( $pwd.Path )"; Get-ChildItem | ? { $_.Attributes -match 'ReparsePoint' -and $_.Target -ne $null } | % {
$linktype = $_.LinkType
$target = Resolve-Path -Path $_.Target
if ($_.Attributes -match 'Directory') {
if ($linktype -eq "Junction") {
"mklink /j `"$($_.Name)`" `"$target`""
} else {
"mklink /d `"$($_.Name)`" `"$target`""
}
} else {
"mklink `"$($_.Name)`" `"$target`""
}
}
언급URL : https://stackoverflow.com/questions/817794/find-out-whether-a-file-is-a-symbolic-link-in-powershell
'programing' 카테고리의 다른 글
대상 'x86_64-apple-ios-simulator'에 대한 모듈을 찾을 수 없습니다. (0) | 2023.08.07 |
---|---|
Numpy 배열에서 요소 이동 (0) | 2023.08.07 |
보조 테이블을 통한 재귀 선택 사용 (0) | 2023.08.07 |
Linux에서 도커를 중지하는 방법 (0) | 2023.08.07 |
이미지가 로드될 때 자바스크립트 콜백을 실행하려면 어떻게 해야 합니까? (0) | 2023.08.07 |