dupes.txt包含没有扩展名的文件字符串列表(通过比较没有扩展名的基本名称找到)。我可以通过以下几点来说明这一点:
files=`cat dupes.txt`; for f in "$files"; do echo "$f"; done
我正试图将“$ f”传递给find命令的名称选项
files=`cat dupes.txt`; for f in "$files"; do find . -type f -name "$f"; done
但没有任何回报。建议最受欢迎。换句话说,我想找到与文本文件中的模式匹配的所有文件。
我试过
find . -type f | fgrep -f dupes.txt
但这不会将find的输出限制为与dupes.txt中的文件字符串匹配的文件。
顺便说一句,我在OS X的bash shell中工作。
答案 0 :(得分:3)
这是错误的:
files=`cat dupes.txt`; for f in "$files"; do echo "$f"; done
因为你引用了"$files"
,所以shell没有机会在空格上拆分变量。因此,循环内部"$f"
将包含文件的全部内容。
要迭代文件的内容,请选择
之一while IFS= read -r f; do ...; done < dupes.txt
# or
mapfile -t files < dupes.txt; for f in "${files[@]}"; do ...; done
这是一种创建模式的复杂方法,但您只需要调用find
一次,这是一个巨大的胜利:
find_args=()
while IFS= read -r file; do
find_args+=( -o -name "${file}*" )
done < dupes.txt
find . -type f \( "${find_args[@]:1}" \)
答案 1 :(得分:0)
试试这个:
files=$(cat dupes.txt)
for f in $files; do find . -type f -name "${f}*"; done
答案 2 :(得分:0)
while read i; do
find -type f -name "${i}*"
done < dupes.txt