2014-01-17 4 views
0

я работаю на Баш скрипт, который должен найти файлы, такие как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) нет.

ответ

2

Нет необходимости в AWK, вы можете сделать это с Баш:

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 
} 

Оттуда вы можете просто запустить ф тоже, а не повторяя его.

+0

Ах! Это было действительно более чистое решение, спасибо вам большое! –

Смежные вопросы