Gia*_*not 3 powershell dropbox
我是一名 Node 开发人员,希望将除了大的“node_modules”目录之外的所有工作保存在 Dropbox 中。我在https://help.dropbox.com/files-folders/restore-delete/ignored-files中发现了一个 Powershell 代码,它有选择地忽略 Dropbox 中存在的文件夹:
Set-Content -Path 'C:\Users\yourname\Dropbox(Personal)\YourFileName.pdf' -Stream com.dropbox.ignored -Value 1
Run Code Online (Sandbox Code Playgroud)
我想创建一个 Powershell 脚本来帮助我找到 Dropbox 下的所有“node_modules”目录,然后忽略它们。我真的需要你的帮助,因为我真的不太了解 Powershell。
在互联网上搜索时,我编写了这个小代码片段,以递归方式查找 Dropbox 文件夹内的所有“node_modules”目录。
$BaseDir = "C:\Users\giann\Dropbox\IdeaProjects"
$NameToFind = "node_modules"
$MyVariable = Get-ChildItem $BaseDir -Recurse | Where-Object { $_.PSIsContainer -and $_.Name.EndsWith($NameToFind)}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何组合这两个代码片段?你能指出我正确的方向吗?
谢谢,非常感谢您的支持。
注意:
Set-Content需要-Value参数。如果您只想设置流而不更改内容,请使用-Value $null。它不会清除文件的内容。
你已经快到了,你只需要Get-ChildItem在第二个块中使用你的命令的结果。您还可以使用-Directory参数 onGet-ChildItem仅枚举目录而不枚举文件:
$BaseDir = "C:\Users\giann\Dropbox\IdeaProjects"
$NameToFind = "node_modules"
# Changed variable name for clarity, multiline for readability
$FoundFiles = Get-ChildItem $BaseDir -Directory -Recurse | Where-Object {
$_.Name.EndsWith($NameToFind)
}
foreach($file in $FoundFiles) { Set-Content -Path $file -Stream com.dropbox.ignored -Value $null }
Run Code Online (Sandbox Code Playgroud)
注意:
foreach可以用来代替ForEach-Object下面的,但请记住,foreach在管道外部使用的是一个语句,其功能与foreach => ForeEach-Object在管道内部使用的 cmdlet 别名不同。请阅读本文,foreach了解有关该语句和cmdlet之间差异的更多信息ForEach-Object。
如果您不关心$FoundFiles稍后使用,可以合并最后两个表达式,如下所示:
Get-ChildItem $BaseDir -Directory -Recurse | Where-Object {
$_.Name.EndsWith($NameToFind)
} | ForEach-Object { Set-Content -Path $_ -Stream com.dropbox.ignored -Value $null }
Run Code Online (Sandbox Code Playgroud)
为了完整起见,以及其他发现这一点并想知道如何在 Linux 上执行相同操作的人,如果 Dropbox 文档移动了在 Linux 上使用 Dropbox 执行此操作的命令,则为:
xattr -w com.dropbox.ignored 1 "$filePath"
Run Code Online (Sandbox Code Playgroud)
我不确定是否Set-Content会像 Linux 上那样设置文件属性xattr,但上面的is how Dropbox recommends doing it.
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |