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