GNU Bash使用串联字符串运行Find



我正在使用一个文件传入要从查找中排除的路径。我可以从命令行生成命令并运行它,但当我尝试从脚本执行它时,我会遇到错误。

这是我的脚本:

#!/usr/bin/env bash
nots=$(while read line; do
echo -n "-not -path "*/${line}/*" "
done < exclude_directories.txt)
echo $nots
echo "Run this command:"
echo "find ~/files -type f $nots > ~/files.txt"
find ~/files -type f $nots > ~/files.txt

当我运行脚本时,find命令会返回每个文件,甚至是nots中指定的文件。

以下是启用设置后的输出:

$ ./dump_all_local_repo_files.sh
nots=$(while read line; do
echo -n "-not -path "*/${line}/*" "
done < exclude_directories.txt)
++ read line
++ echo -n '-not -path "*/.git/*" '
++ read line
++ echo -n '-not -path "*/vendor/*" '
++ read line
++ echo -n '-not -path "*/external/*" '
++ read line
++ echo -n '-not -path "*/node_modules/*" '
++ read line
++ echo -n '-not -path "*/test/*" '
++ read line
+ nots='-not -path "*/.git/*" -not -path "*/vendor/*" -not -path "*/external/*" -not -path "*/node_modules/*" -not -path "*/test/*" '
echo $nots
+ echo -not -path '"*/.git/*"' -not -path '"*/vendor/*"' -not -path '"*/external/*"' -not -path '"*/node_modules/*"' -not -path '"*/test/*"'
-not -path "*/.git/*" -not -path "*/vendor/*" -not -path "*/external/*" -not -path "*/node_modules/*" -not -path "*/test/*"
echo "Run this command:"
+ echo 'Run this command:'
Run this command:
echo "find ~/files -type f $nots > ~/files.txt"
+ echo 'find ~/files -type f -not -path "*/.git/*" -not -path "*/vendor/*" -not -path "*/external/*" -not -path "*/node_modules/*" -not -path "*/test/*"  > ~/files.txt'
find ~/files -type f -not -path "*/.git/*" -not -path "*/vendor/*" -not -path "*/external/*" -not -path "*/node_modules/*" -not -path "*/test/*"  > ~/files.txt
find ~/files -type f $nots > ~/files.txt
+ find /Users/ken/files -type f -not -path '"*/.git/*"' -not -path '"*/vendor/*"' -not -path '"*/external/*"' -not -path '"*/node_modules/*"' -not -path '"*/test/*"'

您的find版本真的支持-not运算符吗?通常拼写为!

要查找所有非目录,您将使用

find . ! -type d

您还应该删除中的引号

find ~/files -type f "$nots"

因为有了引号就没有分词。也就是说,

nots=$(while read line; do
echo -n "-not -path */${line}/* "
done < exclude_directories.txt)
find ~/files -type f $nots > ~/files.txt

应该起作用。

相关内容

  • 没有找到相关文章

最新更新