我必须在超过9000个文件上通过svn propset设置svn:keywords。我的第一个想法是每次使用for循环来调用svn propset。问题是:这真的很慢。操作系统必须为每个文件创建一个进程。我想阻止这一点。
所以,我的第二个想法是给svn命令一个包含文件名的文件。但是SVN并不接受这一点。
我正在使用powershell脚本来获取所有文件。我的第三个想法是使用管道或重定向一个文件/命令的输出作为另一个文件/命令的输入。但这也不起作用。
$fileList = "fileList.txt"
Out-File -filePath $fileList -inputObject ""
$files = Get-ChildItem . -recurse -include *.java,*.xml,*.properties,*.sql,*.ps1,*.bat | Where-Object {!($_.psIsContainer)}
foreach($file in $files) {
Out-File -filePath $fileList -inputObject $file.fullname -append
}
Write-Host "Alle Dateien gefunden. Setze jetzt die SVN Property."
svn propset svn:keywords "LastChangedDate LastChangedRevision LastChangedBy Id HeadURL Revision Author Date"<$fileList
我的最后一个想法是创建一个包含所有文件的一个STRING。但是所有文件名(带绝对路径)大约需要1,200万个字符。我试过了,但它已经没有足够的可用空间了。
我现在能做什么? SVN propset有一个参数“--targest”,但这不起作用。我不知道为什么。
映入眼帘,
布拉克
答案 0 :(得分:1)
如果单个字符串中有多个文件,但无法一次处理它们,您可以使用Get-Content的-ReadCount参数将它们分解为可管理的批次。
Get-Content $filelist -ReadCount 100 |
foreach-object {
$filebatch = $_ -join ','
}
一次读取100个文件名,将它们加入逗号分隔列表,然后您可以预先通过这些批次。