cp используя линии с пробуждением - PullRequest
0 голосов
/ 04 февраля 2011
var=$(pwd);diff -x .DS* -r aa bb | cut -f3,4 -d' '| sed 's/\://' | awk -v "var=$var" 'BEGIN{OFS="/"} {split($2,a,"-"); a[1]=toupper(a[1]) if ($1 ~/^bb/) {print var, $1, $2 " " var, "aa"} 
else {print var, $1, $2 " " var, "bb"}}' | cp -r $(cut -f1 -d" ") $(cut -f2 -d" ")

Сравнивает два каталога и возвращает исходный и целевой адреса для копирования.Предполагаемый результат состоит в том, что обе папки в конечном итоге содержат одни и те же файлы и папки внутри них.

Часть cp-cut не работает.Выполнение cp вручную дает правильный результат.Вывод операций вырезания выглядит нормально.

Оставляя предложение cp-cut, скрипт выдает такие строки

/ Users / Tom / Desktop / aa / AWK / awk-parse-email-add-or.textClipping / Users / tom / Desktop / bb

Итак, это исходный материал - исходный файл и целевой каталог - для копирования вырезки awk в папку bb.

Может ли какой-нибудь добрый человек подсказать, где я иду не так?

Том

1 Ответ

0 голосов
/ 04 февраля 2011

Вы используете подстановку команд, $(cut -f1 -d" ") и $(cut -f2 -d" "), но эти команды недопустимы, потому что cut требует ввода.

Попробуйте вместо этого использовать xargs.Измените свою последнюю трубу на:

| xargs -n 2 cp -r 
...