gpt4 book ai didi

linux - 计算文件名与字符串匹配的目录中的文件

转载 作者:太空狗 更新时间:2023-10-29 11:24:03 25 4
gpt4 key购买 nike

命令:

ls /some/path/some/dir/ | grep some_mask_*.txt | wc -l

在 bash 上通过 ssh 执行此操作时返回正确数量的文件。当我将其放入 .sh 脚本时

iFiles=`ls /some/path/some/dir/ | grep some_mask_*.txt | wc -l`
echo "iFiles: ${iFiles}"

它总是0。这里有什么问题吗?

解决方案:
当我处理它时,我发现我的“通配符掩码”似乎是问题所在。使用 grep some_mask_ | grep\.txt 而不是上面的单个 grep 帮助我解决了第一个问题。

我将答案标记为解决方案,它几乎准确地描述了我做错了什么。我现在要编辑我的脚本。谢谢大家。

最佳答案

这里的问题是 grep some_mask_*.txt 是由 shell 而不是 grep 展开的,所以很可能你在执行 grep 的目录中有一个文件匹配 some_mask_ *.txt然后 grep 使用该文件名作为过滤器。

如果要确保 grep 使用该模式,则需要将其用单引号引起来。此外,您需要将模式编写为正则表达式而不是通配符匹配(bash 用于匹配)。把这些放在一起你的命令行版本应该是:

ls /some/path/some/dir/ | grep 'some_mask_.*\.txt' | wc -l

和脚本:

iFiles=`ls /some/path/some/dir/ | grep 'some_mask_.*\.txt' | wc -l`
echo "iFiles: ${iFiles}"

请注意,. 需要以反斜杠作为前缀,因为它作为匹配单个字符的正则表达式具有特殊意义。

我还建议您在正则表达式后缀 $ 以将其锚定到末尾(从而确保正则表达式匹配以“.txt”结尾的文件名):

ls /some/path/some/dir/ | grep 'some_mask_.*\.txt$' | wc -l

关于linux - 计算文件名与字符串匹配的目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36933032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com