我正在使用sed对文件进行大量更改。我认为该问题与任何要遍历匹配模式的文件并在原始文件搜索递归中包括子目录并在文件创建输出中包含子目录(即创建它们以复制结构)的操作有关。
我最初得到的文件
mkdir -p _seded
for file in *_spec.rb
do
cat $file
... a bunch of seds
> _seded $file
end
如何获取与模式匹配的文件以及文件的子目录?
例如,如果我有
spec/ex1
spec/ex2_spec.rb
spec/subs/subex1
spec/subs/subex1_spec.rb
spec/subs/subex2/aaa
spec/subs/subex3/s3_spec.rb
spec/subs/subex4/s4.rb
spec/subs/subex4/bbb
那么我应该得到:
_seded/ex2_spec.rb
_seded/subs/subex1_spec.rb
_seded/subs/subex3/s3_spec.rb
注:目录subex2和subex4应该不会被创建,因为他们将是空的。
我试过了:
mkdir -p _seded
find . -name '*_spec.rb' | xargs cat |
sed -e '[/pattern/replace code]' > _seded/$file
但出现类似以下错误:
$ ./convert_should_to_expect.sh
./convert_should_to_expect.sh: line 5: _seded/: Is a directory
xargs: cat: terminated by signal 13
now doing its !!!
sed: couldn't edit _seded/: not a regular file
awk: cmd. line:1: fatal: cannot open file `_seded/' for reading (Is a directory)
mv: `_seded/tmp' and `_seded/tmp' are the same file
sed: couldn't edit _seded/: not a regular file
sed: couldn't edit _seded/: not a regular file
您可以执行以下操作:
cd spec
find . -type f -name '*_spec.rb' | while read file; do
mkdir -p ../_seded/"${file%/*}"
cat "$file" | sed ... > ../_seded/"$file"
done
${file%/*}
将切断的文件名部分$file
,以便可用于在目录中创建输出目录。mkdir command
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句