我想从目录中获取所有具有模式且不在find
文件中的文件。
我试过这个命令:
./directory/file.js
但.ignore
输出与*.min.js
directory/directory2/*
directory/file_56.js
类似,我的find . -name '*.js' -type f $(printf "! -name %s " $(cat .ignore | sed 's/\//\\/g')) | # keeps the path
sed 's/^\.\///' | # deleting './'
grep -Fxvf .ignore
格式如下:
*.min.js
所以grep不符合任何......
有没有人有关于如何做到这一点的想法/线索?
更新 所以我发现了一些东西,但它并没有完全发挥作用:
directory/file_56.js
directory/directory2/*
和mod_offline
有效(不显示),ignore_pep_from_offline: true
max_user_offline_messages:
admin: 5000
all: 100
mod_offline:
access_max_user_messages: max_user_offline_messages
无效
答案 0 :(得分:2)
您好像正在寻找Git&#39 {s} .gitignore
文件支持的功能的一部分:
args=()
while read -r pattern; do
[[ ${#args[@]} -gt 0 ]] && args+=( '-o' )
[[ $pattern == */* ]] && args+=( -path "./$pattern" ) || args+=( -name "$pattern" )
done < .ignore
find . -name '*.js' ! \( "${args[@]}" \)
find
的排除测试首先在Bash数组中构建,允许应用特定于行的逻辑:
注意如何使用-path
或-name
测试,具体取决于.ignore
手头的模式是否包含至少一个/
:
-path
测试的模式以./
为前缀,以匹配find
输出的路径。-name
的模式保持原样; *.min.js
的模式将匹配子树中的任何位置。使用您的示例.ignore
文件,上面会产生以下find
命令:
find . -name '*.js' ! \( \
-name '*.min.js' -o -path './directory/directory2/*' -o -path './directory/file_56.js' \
\)