列出没有相应规范的文件

时间:2014-07-28 18:08:08

标签: ruby linux command-line

我已经使用了以下文件列表:

$ 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.rbthing_serializer.rb。但是,thing_controller.rb没有相应的thing_controller_spec.rb

为了让我确定thing_controller.rb没有相应的thing_controller_spec.rb,我可以管道这个列表?

2 个答案:

答案 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