查找命令中的 awk 替换



我正在开发一个应该找到诸如

/var/www/templates/testdoctype/test_file.html.head

并返回类似的东西

cp -f '/var/www/sites/t/test/test_file.html' '/home/user/tmp/test_file.html'    

到目前为止,我的脚本如下所示:

#!/bin/bash
DOCPATH='/var/www/templates/testdoctype'
INSTALL_PATH='/var/www/sites/t/test'
PKGBACKPATH='/home/user/tmp'
function find_suffix_head {
  find "$FROM/$DOCTYPE" -type f -iname "*.head" -print 
  | awk -v docpath="$DOCPATH" -v installpath="$INSTALL_PATH" -v pkgbackpath="$PKGBACKPATH" 
  '{ sub( docpath, installpath ) sub(/.head$/, "") } { printf "cp -f ""'''"$0"'''"" " ; sub( installpath, pkgbackpath ) ; print "'''"$0"'''" }'
}
find_suffix_head

这返回

cp -f '/var/www/templates/testdoctype/test_file.html' '/var/www/templates/testdoctype/test_file.html'

所以,sub(/.head$/, "")按应有的方式工作,但sub( docpath, installpath )sub( installpath, pkgbackpath )却没有。

不需要 awk,你可以用 bash 来做:

function find_suffix_head {
  find "$FROM/$DOCTYPE" -type f -name "*.head" | while read filename; do
    filename=${filename%.head} # strip suffix
    filename=${filename#/var/www/templates/testdoctype} # strip prefix
    echo cp -f "$INSTALL_PATH/$filename" "$PKGBACKPATH/$filename"
  done
}

从那里你也可以运行 cp,而不是回显它。

相关内容

  • 没有找到相关文章

最新更新