Чувствительность к регистру в AWS Cli Move необходима в PowerShell - PullRequest
0 голосов
/ 27 января 2019

Я новичок в PowerShell, хочу переместить файлы с помощью AWS CLI:

aws s3 mv s3://bucket_nm/src_path/ s3://bucket_nm/tgt_path/archive/ --recursive --exclude * --include Test_*

Проблема в том, что он движется test*, Test*. Та же самая команда в Linux перемещается только Test*, как мне добиться таких же результатов в PowerShell?

1 Ответ

0 голосов
/ 27 января 2019

Это не проблема PowerShell. Windows вообще не чувствительна к регистру, но дизайн, где все мы знаем * Nix чувствителен к регистру.

Итак, вы делаете это в PowerShell, собираясь переместить все, что соответствует шаблону, игнорируя регистр, в соответствии с дизайном.

Вы можете использовать PowerShell и RegEx для указания чувствительности к регистру. Хотя я никогда не пытался сделать это с помощью AWS CLI , поскольку я использую только AWS PowerShell, поскольку PowerShell - это то, что я использую везде, даже в наши дни на клиентах OSX и Linux .

Как обсуждено в этом Q & A: Как выполнить поиск файлов с учетом регистра с помощью PowerShell

Get-Childitem -Path C:\ | Where-Object {$_.what_you_want_to_filter -match "REGEX"}

Get-Childitem -Path C:\ | Where-Object {$_.Name -clike "CAPS*"}

Вы можете использовать вышеуказанный командлет, затем передать его командлету Move-Item или просто напрямую использовать командлет Move-Item.

Обновление для OP

Что касается ...

Но не могу понять, как я могу интегрировать PowerShell чувствительные к регистру инструменты с расширением aws.

То, что вы показываете, находится в интерфейсе командной строки AWS, в котором вы используете обычную операцию сравнения, вы также можете использовать оператор сравнения. Пример

'Test*' -eq 'Test*'
True
'test*' -ceq 'Test*'
False

Вы говорите, что вы пробовали это, и вы не получили то, что вы хотели?

Операторы сравнения PowerShell -eq, -ceq и -ieq

Операторы сравнения

Или измените свой код, чтобы сделать это ...

'test*','Test*' | select-string -pattern 'Test*'
test*
Test*


'test*','Test*' | select-string -pattern 'Test*' -CaseSensitive
Test*

Я немного больше об этом говорил на своем локальном диске, у меня нет S3, и, как указано, я не использую AWS CLI ни ​​в одном из моих случаев использования AWS.

Попробуйте, если, конечно, вы ищете только первый символ с большой буквы.

Clear-Host
(Get-ChildItem -Path 'D:\Temp\*Test*').FullName

<#
D:\Temp\BusinessTest.pptx
D:\Temp\BusinessTest.pptx - Shortcut.lnk
D:\Temp\Test.clixml
D:\Temp\test.csv
D:\Temp\test.docx
D:\Temp\test.zip
D:\Temp\TestD&DScript.gif
#>

Clear-Host
Get-ChildItem -Path 'D:\Temp\*Test*' | 
Where-Object {$_.Name -cmatch '^[A-Z].*'} 

<#
    Directory: D:\Temp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        7/27/2018  12:38 PM          33520 BusinessTest.pptx
-a----         8/4/2018  11:44 PM           1084 BusinessTest.pptx - Shortcut.lnk
-a----        10/2/2018   5:26 PM            202 Test.clixml
-a----        8/24/2018   7:37 PM         439363 TestD&DScript.gif
#>

Итак, может быть ...

${v_file_exst_chk} = (aws s3 ls s3://${v_full_src_path}) | 
Where-Object {$_.Name -cmatch '^[A-Z].*'} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...