=dcsw additional output
This commit is contained in:
parent
c8b9f5d2dc
commit
c2675e2346
|
@ -1,7 +1,7 @@
|
|||
[CmdletBinding()]param(
|
||||
[switch]$NoClearScreen,
|
||||
[string]$DataSet = 'szmedia/nextcloud',
|
||||
[string]$DestBackupRoot = '_gw:z/szbackup'
|
||||
[string]$DestBackupRoot = 'root@gw.lksz.me:z/szbackup'
|
||||
)
|
||||
if( -not $NoClearScreen ) { Clear-Host }
|
||||
Write-Verbose "& syncoid --recursive `$DataSet{'$DataSet'} `"`$DestBackupRoot/`$DataSet`"{`"$DestBackupRoot/$DataSet`"}"
|
||||
|
|
|
@ -48,7 +48,7 @@ process {
|
|||
$local:item = $Path | Get-Item
|
||||
|
||||
$Path | Get-Item | ForEach-Object {
|
||||
$local:p = $_.FullName
|
||||
$local:p = $_.FullName -replace "'","''"
|
||||
$local:nextCmd = ""
|
||||
|
||||
$nextCmd = "(@(Get-Item '$p') + (Get-ChildItem '$p' $cmdArgs)) | " +
|
||||
|
|
|
@ -1 +1,20 @@
|
|||
Invoke-ExpressionEx -sudo "`$env:TERM='tmux-256color'; `$env:EDITOR='$env:EDITOR'; ranger $args"
|
||||
[CmdletBinding()]param(
|
||||
[Parameter(Position = 0, ValueFromRemainingArguments)]
|
||||
[string[]]$Path,
|
||||
[string]$User,
|
||||
[switch]$NoTmuxManipulations
|
||||
)
|
||||
|
||||
$local:sudoParams = @{sudoArgs=@("-i")}
|
||||
if( $User ) {
|
||||
$sudoParams.sudoArgs += @("-u",$User)
|
||||
}
|
||||
|
||||
if( -not $NoTmuxManipulations ) {
|
||||
# this should probably be controlled by byobu-keybindings script, but it looks like it's broken
|
||||
tmux source-file $env:BYOBU_PREFIX/share/byobu/keybindings/f-keys.tmux.disable ';' source-file ~/.byobu/keybindings.tmux ';' display-message "Byobu F-keys: DISABLED"
|
||||
}
|
||||
Invoke-ExpressionEx -sudo @sudoParams "`$env:TERM='tmux-256color'; `$env:EDITOR='$env:EDITOR'; ranger $($Path -join '')"
|
||||
if( -not $NoTmuxManipulations ) {
|
||||
tmux source-file $env:BYOBU_PREFIX/share/byobu/keybindings/f-keys.tmux ';' source-file ~/.byobu/keybindings.tmux ';' display-message "Byobu F-keys: ENABLED"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,143 @@
|
|||
[CmdletBinding(SupportsShouldProcess,ConfirmImpact='Medium')]param(
|
||||
[Parameter(Mandatory,ParameterSetName="RemoteSrc")]
|
||||
[string]$RemoteSrc,
|
||||
[Parameter(Mandatory,ParameterSetName="Local",Position=1)]
|
||||
[Parameter(Mandatory,ParameterSetName="RemoteSrc",Position=1)]
|
||||
[Parameter(Mandatory,ParameterSetName="RemoteDst",Position=1)]
|
||||
[string]$SrcBase,
|
||||
[Parameter(Mandatory,ParameterSetName="Local",Position=2)]
|
||||
[Parameter(Mandatory,ParameterSetName="RemoteSrc",Position=2)]
|
||||
[Parameter(Mandatory,ParameterSetName="RemoteDst",Position=2)]
|
||||
[string]$DstBase,
|
||||
[Parameter(Mandatory,ParameterSetName="RemoteDst")]
|
||||
[string]$RemoteDst,
|
||||
[Parameter(Position=4)]
|
||||
[string]$Path=".",
|
||||
[switch]$NoPassThru,
|
||||
[int]$Depth=-1,
|
||||
[int]$Limit,
|
||||
[Alias("Do")]
|
||||
[switch]$NoSimulate
|
||||
)
|
||||
Write-Host -ForegroundColor Cyan ( $PSCmdlet | Out-String )
|
||||
Write-Host -ForegroundColor Yellow ( $PSBoundParameters | Out-String )
|
||||
|
||||
function GetLocalPath{
|
||||
[CmdletBinding(SupportsShouldProcess,ConfirmImpact='Low')]param(
|
||||
[string]$LocalBase,
|
||||
[string]$Path = "."
|
||||
)
|
||||
return ([System.IO.Path]::GetFullPath((Join-Path $LocalBase $Path),"/"))
|
||||
}
|
||||
|
||||
function GetRemotePath{
|
||||
[CmdletBinding(SupportsShouldProcess,ConfirmImpact='Low')]param(
|
||||
[string]$RemoteAddr,
|
||||
[string]$RemoteBase,
|
||||
[string]$Path = "."
|
||||
)
|
||||
return "$RemoteAddr`:$(
|
||||
[Management.Automation.WildcardPattern]::Escape(
|
||||
[System.IO.Path]::GetFullPath((Join-Path $RemoteBase $Path),"/")
|
||||
) -replace '([&\[\(\)\\])','\$1'
|
||||
)"
|
||||
}
|
||||
|
||||
function GetSubstituedPath{
|
||||
[CmdletBinding(SupportsShouldProcess,ConfirmImpact='Low')]param(
|
||||
[string]$OriginalPath,
|
||||
[string]$Base,
|
||||
[string]$ReplaceBase,
|
||||
[string]$RemotePrefix
|
||||
)
|
||||
|
||||
$local:newPath = $OriginalPath -replace "^$([regex]::Escape($Base))",($ReplaceBase -replace '\$(\d)','\$$1')
|
||||
if( $RemotePrefix ) {
|
||||
$newPath = GetRemotePath $RemotePrefix $newPath
|
||||
}
|
||||
return $newPath
|
||||
}
|
||||
|
||||
|
||||
$local:SrcPath = GetLocalPath $SrcBase $Path
|
||||
$local:DstPath = GetLocalPath $DstBase $Path
|
||||
$local:LocalPath = [string]::Empty
|
||||
|
||||
if( -not $RemoteSrc ) {
|
||||
$LocalPath = $SrcPath
|
||||
} else {
|
||||
$LocalPath = $DstPath
|
||||
}
|
||||
|
||||
function GetSortedDirsDepthFirst {
|
||||
param([string]$Path,$StopDepth=-1,$CurrentDepth=0)
|
||||
|
||||
$local:dirs = Get-ChildItem $Path -Directory |
|
||||
Sort-Object Name
|
||||
foreach( $local:d in $dirs ) {
|
||||
if( $StopDepth -lt 0 -or $CurrentDepth -lt $StopDepth ) {
|
||||
GetSortedDirsDepthFirst $d.FullName $StopDepth ($CurrentDepth + 1)
|
||||
}
|
||||
$d
|
||||
}
|
||||
}
|
||||
|
||||
$local:limitParam = @{}
|
||||
if( $Limit -gt 0 ) {
|
||||
$limitParam.First = $Limit
|
||||
}
|
||||
$local:Pairs = @()
|
||||
if( -not $RemoteSrc ) {
|
||||
$Pairs = GetSortedDirsDepthFirst $LocalPath -StopDepth $Depth |
|
||||
Select-Object @limitParam |
|
||||
ForEach-Object {
|
||||
[PSCustomObject]([ordered]@{
|
||||
SrcGB = -1
|
||||
Src = GetLocalPath $_.FullName
|
||||
Dst = GetSubstituedPath $_.FullName $SrcPath $DstPath $RemoteDst
|
||||
})
|
||||
}
|
||||
} else {
|
||||
$Pairs = , ([PSCustomObject]([ordered]@{
|
||||
Src = GetRemotePath $RemoteSrc $SrcPath
|
||||
Dst = $DstPath
|
||||
}))
|
||||
}
|
||||
|
||||
$local:sw = [System.Diagnostics.Stopwatch]::StartNew();
|
||||
$Pairs | ForEach-Object {
|
||||
$local:s = $_.Src -replace "'",'${Q}'
|
||||
$local:d = $_.Dst -replace "'",'\\${Q}'
|
||||
$local:skip = $false
|
||||
if( $_.SrcGB ) {
|
||||
$_.SrcGB = [Math]::Round( (
|
||||
Get-ChildItem -Recurse -File $_.Src | Measure-Object -Sum Length
|
||||
).Sum / 1000000000, 2)
|
||||
if( -not $_.SrcGB ) {
|
||||
$_.SrcGB = "Skip"
|
||||
} else {
|
||||
$_.SrcGB = "$($_.SrcGB) GB"
|
||||
}
|
||||
}
|
||||
Write-Host -ForegroundColor Cyan ($($_ | Format-Table -HideTableHeaders | Out-String).Trim())
|
||||
$local:exp = "Q=\`"'\`"; rsync -avzh --remove-source-files --progress \`"$s/\`" \`"$d/\`""
|
||||
|
||||
$sw.Restart()
|
||||
if( -not $_.SrcGB -or $_.SrcGB -ne "Skip" ) {
|
||||
$exp | Out-Host
|
||||
|
||||
sh -c $exp | Out-Host
|
||||
}
|
||||
|
||||
Write-Host -Cyan "Cleanup '$s'..."
|
||||
$exp = "Q=\`"'\`"; find \`"$s\`" -type d -empty -delete"
|
||||
sh -c $exp | Out-Host
|
||||
|
||||
[PSCustomObject]([ordered]@{
|
||||
PSTypeName = 'RsyncReport'
|
||||
SrcGB = $_.SrcGB
|
||||
Elapsed = $sw.Elapsed
|
||||
Src = $_.Src
|
||||
Dst = $_.Dst
|
||||
})
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
[CmdletBinding()]param(
|
||||
[Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName,Position=0,Mandatory)]
|
||||
[Alias('FullName')]
|
||||
[string[]]$Path
|
||||
)
|
||||
|
||||
begin {}
|
||||
process {
|
||||
$Path |
|
||||
Get-ChildItem -Directory -Recurse |
|
||||
Where-Object {
|
||||
0 -eq (Get-ChildItem -File -Recurse ($_.FullName -replace '([\[\]])','`$1')).Length
|
||||
} |
|
||||
ForEach-Object {
|
||||
Write-Host "Removing $($_.FullName)..."
|
||||
Remove-Item -Force -Recurse -LiteralPath $_.FullName
|
||||
}
|
||||
}
|
||||
end {}
|
|
@ -31,8 +31,7 @@ $ProjectPath | ForEach-Object {
|
|||
$gciParams.Depth = $Depth
|
||||
}
|
||||
$dcPathList += Get-ChildItem -Path $_ -Include "docker-compose$ext" @gciParams |
|
||||
Select-Object -ExpandProperty Directory # |
|
||||
# Where-Object { $Force -or -not (Test-Path $(Join-Path $_ .noauto.all)) }
|
||||
Select-Object -ExpandProperty Directory
|
||||
}
|
||||
if( ($dcPathList -and -not $Recure) -or $ext -eq '.yaml' ) {
|
||||
break
|
||||
|
@ -46,6 +45,16 @@ $local:QueryOnly = -not $On -and -not $Off -and -not $Toggle
|
|||
|
||||
$dcPathList | ForEach-Object {
|
||||
$local:name = "$_"
|
||||
$local:c = Get-Content -Head 3 (Join-Path $_ "docker-compose$ext")
|
||||
$local:r = [ordered]@{
|
||||
Dir = Split-Path -Leaf $_
|
||||
State = ""
|
||||
Version = ($c[0] -replace 'Version: ','' -replace "[`"']",'').Trim()
|
||||
Stack = "?"
|
||||
}
|
||||
if( $c[1] -match "^# stack(?:\W*): ?(\w+)\W*$" ) { $r.Stack = $matches[1] }
|
||||
if( $c[2] -match "^# ports prefix: ([\dx#]{4,5})" ) { $r.Stack = $matches[1] + " | " + $r.Stack }
|
||||
|
||||
if( $PWD -like $name ) {
|
||||
$name = Split-Path -Leaf $name
|
||||
} else {
|
||||
|
@ -65,12 +74,16 @@ $dcPathList | ForEach-Object {
|
|||
} elseif( -not $QueryOnly -and -not $IsOff ) {
|
||||
$null = New-Item -ItemType File -Path $NoAutoPath -Value ""
|
||||
}
|
||||
Write-Host -ForegroundColor Magenta -NoNewline "Off"
|
||||
# Write-Host -ForegroundColor Magenta -NoNewline "Off"
|
||||
$r.State = "Off"
|
||||
} elseif( ($QueryOnly -and -not $IsOff) -or (-not $QueryOnly -and $SetOn) ) {
|
||||
if( -not $QueryOnly -and $IsOff ) {
|
||||
Move-Item $NoAutoPath $NoAutoOffPath
|
||||
}
|
||||
Write-Host -ForegroundColor Green -NoNewline "On "
|
||||
# Write-Host -ForegroundColor Green -NoNewline "On "
|
||||
$r.State = "On"
|
||||
}
|
||||
Write-Host -ForegroundColor Cyan " $name"
|
||||
# Write-Host -ForegroundColor Cyan " $name"
|
||||
|
||||
[PSCustomObject]$r
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue