Script/bin/bash扩充太长,grep部分在find中不起作用



我正在尝试编写一个简单的脚本,该脚本将查找文件中的字段是否为空,例如x_Field="

find /mnt/sdb1/*/*/ -name 'files.txt' -type f -follow -print0 {} ; | xargs -0 grep -o -P '(?<=x_Field).*(?=y_Field)' | cut -c 3 | awk '{sub(/..$/,"")}1'

我认为命令在没有find的情况下有效,但在有find的时候无效?

grep -o -P '(?<=x_Field).*(?=y_Field)' | cut -c 3 | awk '{sub(/..$/,"")}1'

此外,当我得到这一半工作,如果我似乎有太多的文件要扫描,所以它给了一个增加太长:-(

很抱歉还要补充一点,我需要浏览数百个子文件夹,因此我使用通配符

find命令有许多错误。

显然,/mnt/sdb1/*/*扩展为一个列表,该列表对于您的shell来说太长了。您可以将其替换为/mnt/sdb1 -mindepth 2(假设您希望避免在sdb1正下方的目录中找到任何内容)。

如果您有-exec选项,那么{} ;会很有用,但您没有。

此外,grep | cut | awk可能可以重构为一个单独的Awk脚本,但如果不正确理解它应该实现什么,就很难编写替代脚本。

最新更新