列出内容以Bash中的字母开头的文件

时间:2017-05-09 04:09:57

标签: bash

我需要编写一个bash脚本,列出目录(及其子目录)中以某个字母开头的所有文件,例如A / a。如果文件的内容应该以字母开头而不是名字,怎么办?

2 个答案:

答案 0 :(得分:2)

只需使用Bash和globstar选项(shopt -s globstar)即可启用**/*

for file in **/*; do [[ $(< "$file") == [Aa]* ]] && echo "$file"; done

以递归方式遍历所有文件(和目录)并检查其内容是以A还是a开头。如果是,则打印文件名。

它实际上还尝试将目录与[Aa]*进行比较,但只有当$(< "$file")是目录时才会返回$file的非成功退出状态。

或者,如果没有Bashsims,请使用find

find . -type f -exec sh -c '[ "$(head -c 1 "$1" | tr A a)" = a ]' _ {} \; -print

此文件过滤器(-type f),然后生成子shell,运行测试"$(head -c 1 "$1" | tr A a)" = a(获取文件的第一个字符,将潜在的大写A转置为{{1与a比较,如果成功的退出状态成功,则打印文件名。

答案 1 :(得分:1)

grep -rn "^[A|a]" * | awk -F: '$2==1{print $1}'

以递归方式(-r)grep查找当前文件夹中的模式^[A|a]。如果找到(不需要在第一行),grep输出看起来像filname:linenumber:match。将awk:用作字段分隔符,对于亚麻码为1(匹配在第一行,即文件开头)的情况,请打印1st字段,即文件名。 grep输出将包含linenumber,因为我们给出了-n选项。