我正在使用一些代码来检查某些文件是否相互匹配,然后向用户提示问题并根据用户的响应采取适当的措施。但是,bash完全忽略了我的读取命令!
declare -i int
int=1
find ./1 -name '*.xyz' | while read FILENAME
do
find . -name '*.xyz' | while read FILENAME2
do
if [ $FILENAME != $FILENAME2 ]; then
if [ $(dirname "${FILENAME}") != $(dirname "${FILENAME2}") ]; then
if [ $(basename "${FILENAME}") == $(basename "${FILENAME2}") ]; then
int=int+1
if cmp -s "$FILENAME" "$FILENAME2" ; then
echo "Match", "$FILENAME", "$FILENAME2", "$int"
else
# echo "No Match", "$FILENAME", "$FILENAME2", "$int"
read -p "No match modify? (y/n)" d
echo "$d ";
fi
if [ "$int" -gt 44 ]; then
exit 1
fi
fi
fi
fi
done
done
我正在使用osx。 我已经检查了一个简单的读取命令,并且在我的终端机(iterm)上的循环外正常运行了。
答案 0 :(得分:1)
整个% function entry
sum(N) -> sum(N,0);
sum(0,Acc) -> Acc;
sum(N,Acc) -> sum(N-1,Acc+N).
循环都重定向了其标准输入。任何while
都会消耗read
而不是用户终端输入的一行内容。
无论如何,在外循环内重复运行相同的find
命令效率极低。可能将来自两个find
命令的结果收集到两个数组中,然后简单地循环遍历内存中的字符串,而不是一遍又一遍地遍历同一目录中的磁盘。
但是,如果您尝试查找find
之外的文件,而这些文件与1
中的同名文件相同,则一种更有效的方法是运行
1
然后使用简单的Awk脚本处理重新生成的输出。也许是这样的:
find . -name '*.xyz' -exec shasum {} +