我已经使用了以下文件列表:
$ find ./app ./spec -name "*.rb" -print | sed 's!^.*/!!' | sort
我收到一个这样的清单:
thing.rb
thing_controller.rb
thing_search.rb
thing_search_spec.rb
thing_serializer.rb
thing_serializer_spec.rb
thing_spec.rb
从此列表中,我可以看到thing.rb
具有相应的thing_spec.rb
,同样适用于thing_search.rb
和thing_serializer.rb
。但是,thing_controller.rb
没有相应的thing_controller_spec.rb
为了让我确定thing_controller.rb
没有相应的thing_controller_spec.rb
,我可以管道这个列表?
答案 0 :(得分:1)
你可以写下面的内容:
Dir["./app/**/*.rb"].each do |file|
base = File.basename(file, '.rb')
spec_file = "./spec/#{base}_spec.rb"
puts spec_file unless File.exist? spec_file
end
答案 1 :(得分:1)
这是我从原始答案中得出的shell版本。
#! /usr/bin/env sh
app_dir=$1
spec_dir=$2
extension=$3
for file in $(find $app_dir -name "*${extension}" -print | sed "s!$app_dir*!!" | sed "s!$extension!!"); do
spec_file="${spec_dir}${file}_spec${extension}"
if [ ! -f $spec_file ]; then
echo $spec_file
fi
done
# Usage: ./no_spec_finder ./app ./spec .rb