Чтобы сделать это, используя только одну оболочку, а не по одной на каждый найденный файл (как использовалось в предыдущих ответах):
while IFS= read -r -d '' filename; do
outFile="$HOME/data/${filename%/*}.xml"
mkdir -p -- "${outFile%/*}"
cp -- "$filename" "$outFile"
done < <(find . -name 'config.xml' -print0)
Таким образом, ваш find
испускает поток имен файлов, разделенный NUL, один по одному в цикле while read
в родительской оболочке.
(Вы могли бы использовать "$HOME/data/$(dirname "$filename").xml"
, но с точки зрения производительности это действительно глупо: $()
fork()
отключено от подоболочки, а dirname
- внешний исполняемый файл, который должен быть [ 117] 'd, связаны и загружены; нет смысла тратить все эти накладные расходы, когда вы можете просто выполнять строковые манипуляции внутри самой оболочки).
При получении от объекта таблицы оператор будет ограничен той таблицей, я думаю. Zend_Db_Table::select()
методы возвращают a Zend_Db_Table_Select
объект, который является подклассом Zend_Db_Select
и вводит это ограничение. Попробуйте это вместо этого:
$db = Zend_Db::factory( ...options... );
$select = new Zend_Db_Select($adapter);
$select->from( 'my_table_name' )->join( ...
Если Вы предпочитаете, следующее должно быть эквивалентным:
$db = Zend_Db::factory( ...options... );
$db->select()->from( 'my_table_name' )->join( ...
Вы могли также все еще использовать традиционный $model-> выбор () объект путем добавления setIntegrityCheck (ложь), как так.
$select = $table->select()
->setIntegrityCheck(false)
->from(array('m' => 'memberships'), array('b.id', 'b.title', 'b.description'))
->join(array('b' => 'blogs'), 'b.id = m.blog_id')
->where('m.user_id = ?', (int) $id)
->order('m.created DESC')
->limit(0, 30);
Это отключает проверку, которая выдает исключение:
#0: Select query cannot join with another table