我想递归检查两个特定文件,例如“ hem”和“ haw”,并打印包含这两个文件的文件夹。
答案 0 :(得分:1)
find <top_folder> -name hem -o name haw -print
或
cd <top_folder>
ls **/hem **/haw
答案 1 :(得分:0)
尝试使用此Shellcheck干净的代码:
try {
throw new Exception('error');
} catch(Exception $e) {
app('sentry')->captureException($e);
}
shopt -s globstar
for hempath in ./**/hem ; do
dir=${hempath%/*}
[[ -e $dir/haw ]] && printf '%s\n' "$dir"
done
和globstar
模式的信息,请参见glob - Greg's Wiki。**
的说明,请参见Removing part of a string (BashFAQ/100 (How do I do string manipulation in bash?))。${hempath%/*}
而不是./**/hem
来确保所有匹配的路径均以**/hem
开头,因此即使文件位于当前目录(./
)。.
而不是printf
来打印目录路径。echo
的支持是在Bash 4.0中引入的,在4.3之前的版本中是危险的,因为它曾经跟随符号链接,可能导致无限递归(和失败)或不必要的重复。参见When does globstar descend into symlinked directories?。