0

这个命令有效,但想知道是否有更简洁、简洁的方法来做到这一点。例如,更少的管道、更少的命令、更少的开关等。主要是更少的字符。

get-childitem *  -recurse | select-string  "some string"  | select -expandproperty Path | select -uniq

谢谢!

4

5 回答 5

2

您不需要选择唯一。 select-string-List参数将确保每个文件只获得一个匹配项。

(ls * -r|sls 'foo' -lis).path

或者,根据以下评论进行修改:

(ls -r|sls 'foo' -lis).path

于 2016-02-10T23:19:37.827 回答
1

您可以从一些内置别名开始:

ls -r | sls 'some string' | % path | select -u

细节:

ls -> Get-ChildItem
-r -> -Recurse
sls -> Select-String
% -> ForEach-Object
select -> Select-Object
-u -> -Unique
于 2016-02-10T00:42:58.280 回答
0

您可以使用通配符指定一个路径 to Select-String,所以这可以很短。

(Select-String 'pattern' *.*).Path | Select -Unique

如果您使用别名slsSelect-String它会变得更短。

(sls 'pattern' *.*).Path | Select -Unique

编辑:正如所指出的,上面不做递归搜索。要做到这一点,您必须做一些与@RachelDuncan 建议的非常相似的事情。

ls * -r | sls 'pattern' | Select -Exp Path -U
于 2016-02-10T00:48:26.047 回答
0

比较到目前为止给出的两个答案,我从@TheMadTechnician 开始,因为它使用的管道更少——在美式键盘上输入管道需要按下 SHIFT 键,因此更少的管道 = 更少的 SHIFT = 更少的击键。

然后我*ls命令中删除了,这是不必要的。

就像@Rachel Duncan 的回答一样,我将所有命令和开关都转换为小写,它们不需要是大写的——这样就消除了更多的 SHIFT 按键。

我删除了管道周围的所有空间,它们是不必要的

@Rachel Duncan:46 个字符,3 个 SHIFTS

ls -r | sls 'some string' | % path | select -u

@疯狂的技术员:45 个字符,6 个班次

ls * -r | sls 'pattern' | Select -Exp Path -U

@Johny 为什么:40 个字符,2 个 SHIFTS

ls -r|sls 'textarea'|select -exp path -u

不过,这似乎应该更容易。在我标记已解决之前,任何人都可以提供更简洁的方法吗?

也许使用 Windows 命令行,而不是 powershell?(尽管如此,我想从技术上讲这不会回答这个问题,因为我指定使用 powershell。也许堆栈会允许在评论中使用命令行解决方案?:)

于 2016-02-10T22:40:52.747 回答
0

到目前为止,这是最好的答案:

(ls -r|sls 'foo' -list).path

我删除了 *,并在 -list 上添加了缺少的 t。

28 个字符,3 个班次

于 2016-02-16T10:21:13.343 回答