如何使用 Powershell 在 Dropbox 中递归地忽略文件

How to ignore files recursively in Dropbox using Powershell

我是一名 Node 开发人员,希望将我的所有工作都保存在 Dropbox 中,但 'node_modules' 大目录除外。我在 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

我想创建一个 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)}

我的问题是,如何合并这两个代码片段?你能给我指明正确的方向吗?

谢谢,非常感谢您的支持。

Note: Set-Content requires the -Value parameter. If you just want to set the stream without changing the content, use -Value $null. It will not clear the contents of your file.

你就快完成了,你只需要在第二个块中使用你的 Get-ChildItem 命令的结果。您还可以在 Get-ChildItem 上使用 -Directory 参数来仅枚举目录而不枚举文件:

$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 }

Note: foreach can be used in place of ForEach-Object below but keep in mind the foreach used outside of the pipeline is a statement and functions differently than the foreach => ForeEach-Object cmdlet alias used inside of the pipeline. Read this article for more information on the differences between the foreach statement and ForEach-Object cmdlet.

如果您以后不关心使用 $FoundFiles,您可以像这样合并最后两个表达式:

Get-ChildItem $BaseDir -Directory -Recurse | Where-Object {
  $_.Name.EndsWith($NameToFind)
} | ForEach-Object { Set-Content -Path $_ -Stream com.dropbox.ignored -Value $null }

为了完整性和其他发现此问题并想知道如何在 Linux 上执行相同操作的人,如果 Dropbox 文档移动了在 Linux 上使用 Dropbox 执行此操作的命令是:

xattr -w com.dropbox.ignored 1 "$filePath"

我不确定 Set-Content 是否会像 xattr 那样在 Linux 上设置文件属性,但是上面的 is how Dropbox recommends doing it.